[Python-Dev] compile.c: problem with duplicate argument bugfix

Thomas Wouters thomas@xs4all.net
Mon, 10 Jul 2000 00:26:44 +0200


On Sun, Jul 09, 2000 at 11:17:44PM +0000, Peter Schneider-Kamp wrote:

> While "slaving away" on the Modules/ directory (thanks for
> the term - it made my day <wink>), I still haven't got a
> clue why Python crashes on me when I throw an error on
> duplicate arguments like in:

> >>> def f(a, a): print a
> segfault

> Any help is again appreciated.

Hm, strange. It works fine here. Do you get the segfault every time ?
Anyway, a possible problem is that PyString_InternFromString might return
NULL, and you later PyDict_GetItem() with it (not sure if that's a problem),
and you pass it to com_newlocal_o (not sure if that's a problem either), and
then you Py_DECREF it. And if you pass NULL to that macro you do have a
problem :) You should use Py_XDECREF() if you aren't sure wether the object
is NULL or not.

If your python left a corefile, you can easily find out if that was the
problem by using gdb on it. 'gdb ./python core', wait 'till it finishes
loading, and type 'bt'. It should give you reversed (from a python point of
view) backtrace from the time of the crash.

> !			nameval = PyString_InternFromString(name);
> !			if (nameval == NULL) {
> !				c->c_errors++;
> !			}
> !			if (PyDict_GetItem(c->c_locals, nameval)) {
> !				com_error(c, PyExc_SyntaxError,"double identifier in function definition");
> !			}
> !			com_newlocal_o(c, nameval);
> !			Py_DECREF(nameval);

-- 
Thomas Wouters <thomas@xs4all.net>

Hi! I'm a .signature virus! copy me into your .signature file to help me spread!