On 6/2/05, A.M. Kuchling <[EMAIL PROTECTED]> wrote: > Looking at bug #1209880, the following function from threadmodule.c is > referenced. I think the args==NULL case, which can return None > instead of a Boolean value, can never be reached because > PyArg_ParseTuple() will fail if args==NULL. > > Before ripping the args==NULL code out, I wanted to be sure my > analysis is correct; is there some subtlety here I'm missing that > makes args==NULL possible?
I think the args == NULL code should be ripped out, but there seems to be a different problem. If args is NULL to PyArg_ParseTuple() an assertion will be triggered (or it'll just crash). See vgetargs1() in Python/getargs.c::138. args can be NULL if load_args() in Python/ceval.c fails (line 3724). The trace starts at line 3551, PyCFunction_Call() will be called with the NULL args on line 3553. PyCFunction_Call() will call a PyMethod that will likely call PyArg_ParseTuple() or something like it. I think the following patch should fix this (it just adds an if condition). Does this make sense or am I missing something? n -- Index: Python/ceval.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Python/ceval.c,v retrieving revision 2.422 diff -u -r2.422 ceval.c --- Python/ceval.c 4 Apr 2005 15:49:02 -0000 2.422 +++ Python/ceval.c 2 Jun 2005 13:16:14 -0000 @@ -3549,9 +3549,13 @@ else { PyObject *callargs; callargs = load_args(pp_stack, na); - READ_TIMESTAMP(*pintr0); - C_TRACE(x=PyCFunction_Call(func,callargs,NULL)); - READ_TIMESTAMP(*pintr1); + if (callargs) { + READ_TIMESTAMP(*pintr0); + C_TRACE(x=PyCFunction_Call(func,callargs,NULL));+ READ_TIMESTAMP(*pintr1); + } + else + x = NULL; Py_XDECREF(callargs); } } else { _______________________________________________ Python-Dev mailing list Python-Dev@python.org http://mail.python.org/mailman/listinfo/python-dev Unsubscribe: http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com