--- 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

Reply via email to