[XML-SIG] Bug in XML stuff?
Jack Jansen
Jack.Jansen@cwi.nl
Tue, 09 Jun 1998 13:04:52 +0200
> vbassa:~/aiostudie/bug> python t3.py -r test.xml
> Segmentation fault (core dumped)
>
> This is with Python 1.5.1 (compiled with termios) running on a Indy R5
> (irix 5.3). I used gcc 2.7.2; for running the stuff in the attached
> tarball you'll need saxlib-1.0beta3 installed in /tmp/source/sax
[I'm cc-ing Guido on this too, this appears to be more a string-format problem
than an xml/sax problem. En ten behoeve van xml-sig lezers hou ik 't in het
engels:-)]
The problem appears not to be compiler-dependent: it also crashes on my SGI O2
running 6.2, Python 151 compiled with the SGI compiler.
Dbx told me the following about the problem (only the last few stack frames
shown):
0 memmove(0x100d274c, 0xffffffff, 0xffffffff, 0x100d278c)
["bcopy.s":844, 0xfa6c0e8]
1 PyString_Format(0xb, 0x1011d860, 0x0, 0x0)
["../../Objects/stringobject.c":999, 0x43c7dc]
2 PyNumber_Remainder(0x100e9250, 0x1011d860, 0xffffffff, 0x100d278c)
["../../Objects/abstract.c":413, 0x461854]
3 eval_code2(0x100e9290, 0x100d3190, 0x100e9250, 0x100d3190)
["../../Python/ceval.c"
So, apparently you're doing a % operation here.
Trace tells me the following (only the last couple of lines shown):
> printer.py:28 do_creation (135)
> printer.py:23 root (29)
> printer.py:17 path_to_root (24)
> printer.py:17 path_to_root (20)
< printer.py:21 path_to_root [0.0002]
< printer.py:21 path_to_root [0.0013]
< printer.py:24 root [0.0023]
> printer.py:218 global_typeset (29)
> grobs.py:106 add (219)
> grobs.py:62 add (107)
< grobs.py:66 add [0.0003]
> grobs.py:32 __str__ (111)
> grobs.py:26 __str__ (33)
> interval.py:31 __str__ (27)
< interval.py:32 __str__ [0.0003]
< grobs.py:29 __str__ [0.0015]
Bus error - core dumped
So, apparently we're printing a Graphical_object, and self.coordinate_info[0]
has been formatted successfully. Before we get a chance to format
self.coordinate_info[1] we've crashed. Combined with the dbx stacktrace we
appear to be in the % operation in Graphical_object.__str__().
The only slightly suspect things I can see are (1) you're using recursive
string-% (PyString_Format calls, internally) and (2) you're using floating
point (half-serious: floating point is often less tested than plain integers).
Guido: is PyString_Format recursion-safe, or could there be situations where
it isn't?
--
Jack Jansen | ++++ stop the execution of Mumia Abu-Jamal ++++
Jack.Jansen@cwi.nl | ++++ if you agree copy these lines to your sig ++++
http://www.cwi.nl/~jack | see http://www.xs4all.nl/~tank/spg-l/sigaction.htm