On Fri, Jun 19, 2009 at 10:07:46AM +0200, Viktor Štujber wrote:
> In the meantime, I found that the null pointer is produced in libxml's xpath.c
> 
>     contextSeq = obj->nodesetval;
>     if ((contextSeq == NULL) || (contextSeq->nodeNr <= 0)) {
>       xmlXPathReleaseObject(xpctxt, obj);
>         valuePush(ctxt, xmlXPathCacheWrapNodeSet(xpctxt, NULL));
>         return(0);
>     }
> 
> Is this ok?

  yes

> Why deallocate and return null, instead of keeping things
> consistent?

  A NULL object or an empty node set should be treated in the same way
Reason: that code may be an intermediary step in a lot of recusive
operations and it's better to not have to merge node sets than merging
an empty one, but that's from memory.

> Also, I wonder... is it possible that the code I posted earlier is
> handling things incorrectly? Perhaps the 'nodesetval' pointer is for
> internal use only, and the application should use proper API functions
> to step through the result set? If so, how?

  values inside the XPath object are public, it's part of the API. There
is no iterator API.

Daniel

-- 
Daniel Veillard      | libxml Gnome XML XSLT toolkit  http://xmlsoft.org/
[email protected]  | Rpmfind RPM search engine http://rpmfind.net/
http://veillard.com/ | virtualization library  http://libvirt.org/
_______________________________________________
xml mailing list, project page  http://xmlsoft.org/
[email protected]
http://mail.gnome.org/mailman/listinfo/xml

Reply via email to