--- Jos Visser <[EMAIL PROTECTED]> wrote: > # New Ticket Created by Jos Visser > # Please include the string: [perl #23159] > # in the subject line of all future correspondence about this issue. > # <URL: http://rt.perl.org/rt2/Ticket/Display.html?id=23159 > > > > ------------------------------------------------------------------------ > Description: > ------------------------------------------------------------------------ > The following PIR code causes parrot to dump core: > > .sub _main > find_lex $P1,"n" > print $P1 > print "\n" > end > .end > > ------------------------------------------------------------------------ > Failing routine: > ------------------------------------------------------------------------ > Under GDB it says: > > Program received signal SIGSEGV, Segmentation fault. > 0x080a4323 in scratchpad_find (interp=0x817f2f8, pad=0x0, name=0x40408b5c, > position=0xbfffd850) at sub.c:180 > 180 for (i = pad->cache.int_val - 1; i >= 0; i--) { > > ------------------------------------------------------------------------ > Reason: > ------------------------------------------------------------------------ > Variable "pad" is NULL! > > ------------------------------------------------------------------------ > Additional comments: > ------------------------------------------------------------------------ > Trying to find a lexical when no pad is established is stupid. However, > I don't guess dumping core is the appropriate thing to do, returning > NULL from scratchpad_find probably is. > > ------------------------------------------------------------------------ > Patch: > ------------------------------------------------------------------------ > I don't know if this is the appropriate patch, but still.... > > Index: sub.c > =================================================================== > RCS file: /cvs/public/parrot/sub.c,v > retrieving revision 1.28 > diff -u -b -B -r1.28 sub.c > --- sub.c 21 Jul 2003 18:00:24 -0000 1.28 > +++ sub.c 29 Jul 2003 13:35:55 -0000 > @@ -177,6 +177,9 @@ > INTVAL i, pos = 0; > struct Parrot_Lexicals * lex = NULL; > > + if (!pad) > + return NULL; > + > for (i = pad->cache.int_val - 1; i >= 0; i--) { > lex = &(((struct Parrot_Lexicals *)PMC_data(pad))[i]); > pos = lexicals_get_position(interp, lex, name); > > > With this patch I get the error message "Lexical 'n' not found"..
I don't think it's worth adding extra overhead to lexical variables just to support broken pasm. There are many ways to crash parrot with bad code - but it's OK, since compilers of higher level languages simply won't generate them. :) __________________________________ Do you Yahoo!? Yahoo! SiteBuilder - Free, easy-to-use web site design software http://sitebuilder.yahoo.com