Re: [xml] xmlAddChild and xmlUnlinkNode



On Sun, Mar 13, 2011 at 12:51:26AM +0300, Nikolay Sivov wrote:
Hi.

It seems to me that xmlAddChild behaviour is kinda unexpected when
you try to add a node that is altready linked to another document
(or node of another type). If you don't xmlUnlinkNode before add
call this results in node being referenced by both documents, so on
free is will fail (libc crash for me).

It's fine of course to always do xmlUnlinkNode no matter what but
what bothers me is that xmlAddChild has xmlSetTreeDoc() inside
that's called if new parent document doesn't match new child's doc.
So references are fixed for new node only with xmlSetTreeDoc but not
for old document it seems.

Does it sound reasonable to add xmlUnlinkNode in xmlAddChild or I
should always unlink manually?

I would suggest to unlink. The problem of the document reference
is that it's not only related to the normal parent/children relations
but for example the element subtree may use the source document
dictionary, or namespaces coming from the source. In general
pruning/grafting set of nodes from one document to another is a
complex operation, and I would be as cautious as possible.

Daniel

-- 
Daniel Veillard      | libxml Gnome XML XSLT toolkit  http://xmlsoft.org/
daniel veillard com  | Rpmfind RPM search engine http://rpmfind.net/
http://veillard.com/ | virtualization library  http://libvirt.org/



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]