On Wed, May 04, 2005 at 05:47:23PM -0500, Brent Hendricks wrote:
> The attached script is a copy of the included python test file 
> cutnpaste.py with two important differences:
> 
> 1) It uses replaceNode() instead of addChild() to put the 'cut' node 
> into the destination document
> 
> 2) It segfaults :(
> 
> My guess is that somehow the cut/replaced node is being freed twice.  If 
> I comment out the freeDoc line for either the source or target it stops 
> segfaulting (but then of course, leaks memory).
> 
> Any ideas?

  Hard to tell from just looking at the code.
  Cut and pasting document subtree is getting a very tricky and error
prone business due to dictionaries, though I think this example uses only
the old APIs which don't use dictionnaries by default.

gdb /usr/bin/python and r replace.py confirms the problem:

xmlDictOwns__internal_alias (dict=0xffffffff, str=0x9807388 "bar")
    at dict.c:870
870         pool = dict->strings;
(gdb) where
#0  xmlDictOwns__internal_alias (dict=0xffffffff, str=0x9807388 "bar")
    at dict.c:870
#1  0x0032923f in xmlCtxtCheckName (ctxt=0xbff66c00, name=0x9807388 "bar")
    at debugXML.c:257
#2  0x003294f2 in xmlCtxtGenericNodeCheck (ctxt=0xbff66c00, node=0x980d7f0)
    at debugXML.c:357
#3  0x0032a26f in xmlCtxtDumpAttr (ctxt=0xbff66c00, attr=0x980d7f0)
    at debugXML.c:840
#4  0x0032a290 in xmlCtxtDumpAttrList (ctxt=0xbff66c00, attr=0x980d7f0)
    at debugXML.c:855
#5  0x0032a6c9 in xmlCtxtDumpOneNode (ctxt=0xbff66c00, node=0x97b0a08)
    at debugXML.c:1009
#6  0x0032a7a2 in xmlCtxtDumpNode (ctxt=0xbff66c00, node=0x97b0a08)
    at debugXML.c:1052
#7  0x0032a7e7 in xmlCtxtDumpNodeList (ctxt=0xbff66c00, node=0x97b0a08)
    at debugXML.c:1072
#8  0x0032a7c0 in xmlCtxtDumpNode (ctxt=0xbff66c00, node=0x97b09a8)
    at debugXML.c:1055
#9  0x0032a7e7 in xmlCtxtDumpNodeList (ctxt=0xbff66c00, node=0x97b09a8)
    at debugXML.c:1072
#10 0x0032a7c0 in xmlCtxtDumpNode (ctxt=0xbff66c00, node=0x9803590)
    at debugXML.c:1055
#11 0x0032a7e7 in xmlCtxtDumpNodeList (ctxt=0xbff66c00, node=0x9803590)
    at debugXML.c:1072
#12 0x0032ab90 in xmlCtxtDumpDocument (ctxt=0xbff66c00, doc=0x980d540)
    at debugXML.c:1206
#13 0x0032b23e in xmlDebugCheckDocument__internal_alias (output=0xa6c460,
    doc=0x980d540) at debugXML.c:1561
#14 0x00306b10 in xmlFreeDoc__internal_alias (cur=0x980d540) at tree.c:1136
#15 0x002c32e6 in libxml_xmlFreeDoc (self=0x0, args=0xb7fd140c)
    at libxml2-py.c:13560
#16 0x001c88e1 in PyCFunction_Call () from /usr/lib/libpython2.3.so.1.0
#17 0x001fb4ec in _PyEval_SliceIndex () from /usr/lib/libpython2.3.so.1.0
#18 0x001fc94b in _PyEval_SliceIndex () from /usr/lib/libpython2.3.so.1.0
#19 0x001fd06e in PyEval_EvalCodeEx () from /usr/lib/libpython2.3.so.1.0
#20 0x001fd332 in PyEval_EvalCode () from /usr/lib/libpython2.3.so.1.0
#21 0x002167e7 in PyErr_Display () from /usr/lib/libpython2.3.so.1.0
#22 0x00217912 in PyRun_SimpleFileExFlags () from /usr/lib/libpython2.3.so.1.0
#23 0x00218964 in PyRun_AnyFileExFlags () from /usr/lib/libpython2.3.so.1.0
#24 0x0021d65e in Py_Main () from /usr/lib/libpython2.3.so.1.0
#25 0x080485b2 in main ()
(gdb)

  This is in my debugging environment, but apparently a node refers to a 
deleted dictionnary (dict=0xffffffff means a freed area in libxml2 debug
mode).

Daniel

-- 
Daniel Veillard      | Red Hat Desktop team http://redhat.com/
[EMAIL PROTECTED]  | libxml GNOME XML XSLT toolkit  http://xmlsoft.org/
http://veillard.com/ | Rpmfind RPM search engine http://rpmfind.net/
_______________________________________________
xml mailing list, project page  http://xmlsoft.org/
xml@gnome.org
http://mail.gnome.org/mailman/listinfo/xml

Reply via email to