On Wed Sep 17 08:31:26 2008, particle wrote:
> On Tue, Sep 16, 2008 at 11:45 PM, Christoph Otto via RT
> <[EMAIL PROTECTED]> wrote:
> > On Tue Sep 16 15:00:24 2008, [EMAIL PROTECTED] wrote:
> >> On Tuesday 16 September 2008 14:47:58 NotFound wrote:
> >>
> >> > > It certainly shouldn't segfault. But, the question is: why does it
> >> > > segfault at 206 parameters? Throwing an exception to avoid an
> >> error we
> >> > > don't understand isn't good for the long-term health of the VM.
> >> >
> >> > The problem is located inside compilers/imcc/pcc.c:pcc_get_args
> >> function.
> >> >
> >> > It has the comment /* XXX check avail len */ just at the point where
> >> > the segfault happens. char buf[1024] is the variable overrunned.
> >>
> >> That sounds like a bog-standard static variable overflow, where each
> >> parameter
> >> requires five bytes of storage.  If that's a good rule of thumb, we
> >> could
> >> malloc/free that buffer instead, and then beat anyone who uses more
> >> than a
> >> dozen parameters.
> >>
> >> -- c
> >>
> >
> >
> > Looking at the code, it's 5n+1.  r31200 changes the static buffer to a
> > dynamic one of the correct size.  The original PIR code now runs without
> > segfaulting, as does a version with 20,000 int params.  make test also
> > passes, so nothing new appears to be broken.
> >
> > With the assumption that the said beatings will be a manual process, I'm
> > marking this resolved.
> >
> 
> you didn't mention it, but i sincerely hope you committed a test with
> 20,000 params that proves this and makes sure we don't regress in a
> future revision. parrot needs much more stress testing like this, and
> it would be a shame to miss this opportunity.
> ~jerry
> 

I didn't think of it until after I went to bed, but I added one with
1000 params in r31208 the next morning.  The 20,000 param version took
more than a second to run and I didn't see any reason to slow the tests
down more than necessary.

Reply via email to