Branch: Tag:

2003-08-04

2003-08-04 15:17:28 by Martin Stjernholm <mast@lysator.liu.se>

Oops, safe_apply shouldn't throw errors, it should report them.

Rev: src/interpret.c:1.315

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: interpret.c,v 1.314 2003/08/04 15:05:09 mast Exp $ + || $Id: interpret.c,v 1.315 2003/08/04 15:17:28 mast Exp $   */      #include "global.h" - RCSID("$Id: interpret.c,v 1.314 2003/08/04 15:05:09 mast Exp $"); + RCSID("$Id: interpret.c,v 1.315 2003/08/04 15:17:28 mast Exp $");   #include "interpret.h"   #include "object.h"   #include "program.h"
2023:    id = find_identifier(fun, o->prog);    if (id >= 0)    safe_apply_low2(o, id, args, 1); -  else -  Pike_error ("Cannot call unknown function \"%s\".\n", fun); +  else { +  char buf[4096]; + #ifdef HAVE_VSNPRINTF +  vsnprintf(buf, 4090, "Cannot call unknown function \"%s\".\n", fun); + #else +  VSPRINTF(buf, "Cannot call unknown function \"%s\".\n", fun); + #endif +  if ((size_t) strlen (buf) >= (size_t) sizeof (buf)) +  Pike_fatal ("Buffer overflow in safe_apply()\n"); +  push_error (buf); +  free_svalue (&throw_value); +  move_svalue (throw_value, --Pike_sp); +  call_handle_error(); +  push_int (0);    } -  + }      /* Returns nonzero if the function was called in some handler. */   PMOD_EXPORT int low_unsafe_apply_handler(const char *fun,