On Saturday 15 March 2008 05:48:09 [EMAIL PROTECTED] wrote:

> Author: petergibbs
> Date: Sat Mar 15 05:48:08 2008
> New Revision: 26390
>
> Modified:
>    trunk/src/inter_call.c
>
> Log:
> Prevent overrun of array. Found using valgrind while chasing down tcl test
> failures on linux x86-64.
>
>
> Modified: trunk/src/inter_call.c
> ===========================================================================
>=== --- trunk/src/inter_call.c (original)
> +++ trunk/src/inter_call.c    Sat Mar 15 05:48:08 2008
> @@ -1191,6 +1191,9 @@
>                  idx = st->dest.u.op.pc[i];
>                  store_arg(st, idx);
>
> +                /* Don't walk off the end of the array */
> +                if (i+1 >= st->dest.n)
> +                    continue;
>                  arg_sig = st->dest.sig = SIG_ITEM(st->dest.u.op.signature,
> i+1); if (arg_sig & PARROT_ARG_OPT_FLAG) {
>                      i++;

That explains some weirdness I saw, but I wonder if it's papering over 
something else.

I couldn't explain *why* we were getting apparently invalid bytecode here, but 
something I did made it go away for me.

-- c

Reply via email to