Branch: Tag:

2002-11-23

2002-11-23 16:36:44 by Martin Stjernholm <mast@lysator.liu.se>

Fixed order of checks in find_local_frame to avoid incorrect dereferences.

Rev: src/docode.c:1.160

2:   || This file is part of Pike. For copyright information see COPYRIGHT.   || Pike is distributed under GPL, LGPL and MPL. See the file COPYING   || for more information. - || $Id: docode.c,v 1.159 2002/11/22 15:45:48 grubba Exp $ + || $Id: docode.c,v 1.160 2002/11/23 16:36:44 mast Exp $   */      #include "global.h" - RCSID("$Id: docode.c,v 1.159 2002/11/22 15:45:48 grubba Exp $"); + RCSID("$Id: docode.c,v 1.160 2002/11/23 16:36:44 mast Exp $");   #include "las.h"   #include "program.h"   #include "pike_types.h"
444: Inside #if 1
   *    * * Test if we have a valid current function.    * -  * * Check that the function isn't varargs. -  * +     * * Quick check if id is the current function.    *    * * Check if id is an alternate reference to the current function. -  +  * +  * * Check that the function isn't varargs.    */    if((Pike_compiler->compiler_frame->current_function_number >= 0) && -  (!(Pike_compiler->new_program-> -  identifiers[ref->identifier_offset].identifier_flags & -  IDENTIFIER_VARARGS)) && +     ((id == Pike_compiler->compiler_frame->current_function_number) ||    ((!ref->inherit_offset) &&    (ref->identifier_offset ==    Pike_compiler->new_program->    identifier_references[Pike_compiler->compiler_frame-> -  current_function_number].identifier_offset)))) +  current_function_number].identifier_offset))) && +  (!(Pike_compiler->new_program-> +  identifiers[ref->identifier_offset].identifier_flags & +  IDENTIFIER_VARARGS)))    {    int n=count_args(args);    if(n == Pike_compiler->compiler_frame->num_args)