[Python-Dev] serious bug in new import X as Y code (original) (raw)

Sjoerd Mullender sjoerd@oratrix.nl
Fri, 18 Aug 2000 17:06:37 +0200


Ok, problem solved.

The problem was that because of your (I think it was you :-) earlier change to have a Makefile in Grammar, I had an old graminit.c lying around in my build directory. I don't build in the source directory and the changes for a Makefile in Grammar resulted in a file graminit.c in the wrong place. My subsequent change to this part of the build process resulted in a different place for graminit.c and I never removed the bogus graminit.c (because I didn't know about it). However, the compiler found the bogus one so that's why python crashed.

On Fri, Aug 18 2000 Thomas Wouters wrote:

On Fri, Aug 18, 2000 at 11:42:38AM +0200, Sjoerd Mullender wrote:

> Your changes for the import X as Y feature introduced a serious bug: > I can no longer run Python at all. > The problem is that in line 2150 of compile.c comaddopname is called > with a NULL last argument, and the firat thing comaddopname does is > indirect off of that very argument. On my machine (and on many other > machines) that results in a core dump. Hm. That's very strange. Line 2150 of compile.c calls comaddopname with 'CHILD(CHILD(subn, 0), 0)' as argument. 'subn' is supposed to be a 'dottedasname', which always has at least one child (a dottedname), which also always has at least one child (a NAME). I don't see how dottedasname and dottedname can be valid nodes, but the first child of dottedname be NULL. Can you confirm that the tree is otherwise unmodified ? If you have local patches, can you try to compile and test a 'clean' tree ? I can't reproduce this on the machines I have access to, so if you could find out what statement exactly is causing this behaviour, I'd be very grateful. Something like this should do the trick, changing: } else comaddopname(c, STORENAME, CHILD(CHILD(subn, 0),0)); into } else { if (CHILD(CHILD(subn, 0), 0) == NULL) { comerror(c, PyExcSyntaxError, "NULL name for import"); return; } comaddopname(c, STORENAME, CHILD(CHILD(subn, 0),0)); } And then recompile, and remove site.pyc if there is one. (Unlikely, if a crash occured while compiling site.py, but possible.) This should raise a SyntaxError on or about the appropriate line, at least identifying what the problem could be ;) If that doesn't yield anything obvious, and you have the time for it (and want to do it), some 'print' statements in the debugger might help. (I'm assuming it works more or less like GDB, in which case 'print n', 'print n->nchild[1]', 'print subn', 'print subn->nchild[0]' and 'print subn->nchild[1]' would be useful. I'm also assuming there isn't an easier way to debug this, like you sending me a corefile, because corefiles normally aren't very portable :P If it is portable, that'd be great.) > In case it helps, here is the stack trace. The crash happens when > importing site.py. I have not made any changes to my site.py. Oh, it's probably worth it to re-make the Grammar (just to be sure) and remove Lib/*.pyc. The bytecode magic changes in the patch, so that last measure should be unecessary, but who knows :P breaky-breaky-ly y'rs, -- Thomas Wouters <thomas@xs4all.net> Hi! I'm a .signature virus! copy me into your .signature file to help me spread!

-- Sjoerd Mullender <sjoerd.mullender@oratrix.com>