Update of /cvsroot/perl-xml/XML-LibXML-XPathContext
In directory sc8-pr-cvs1:/tmp/cvs-serv3691
Modified Files:
XPathContext.xs
Log Message:
- fixed bug with wrong owner assignment for non-context document nodes
- regression test for non-context document nodes added
Index: XPathContext.xs
===================================================================
RCS file: /cvsroot/perl-xml/XML-LibXML-XPathContext/XPathContext.xs,v
retrieving revision 1.15
retrieving revision 1.16
diff -u -d -r1.15 -r1.16
--- XPathContext.xs 21 Mar 2003 16:05:01 -0000 1.15
+++ XPathContext.xs 21 Mar 2003 20:11:03 -0000 1.16
@@ -322,8 +322,10 @@
len = nodelist->nodeNr;
for( j ; j < len; j++){
tnode = nodelist->nodeTab[j];
- if( tnode != NULL && tnode->doc != NULL) {
- owner = SvPROXYNODE(sv_2mortal(PmmNodeToSv((xmlNodePtr)(tnode->doc), NULL)));
+ if( tnode != NULL && tnode->doc != NULL) {
+ owner = PmmOWNERPO(PmmNewNode((xmlNodePtr) tnode->doc));
+ } else {
+ owner = NULL;
}
if (tnode->type == XML_NAMESPACE_DECL) {
element = sv_newmortal();
@@ -819,7 +821,6 @@
int i = 0 ;
const char * cls = "XML::LibXML::Node";
xmlNodePtr tnode;
- owner = PmmOWNERPO(PmmNewNode(ctxt->node));
len = nodelist->nodeNr;
for( i ; i < len; i++){
/* we have to create a new instance of an objectptr.
@@ -843,6 +844,11 @@
}
}
else {
+ if (tnode->doc) {
+ owner = PmmOWNERPO(PmmNewNode((xmlNodePtr) tnode->doc));
+ } else {
+ owner = NULL; /* self contained node */
+ }
element = PmmNodeToSv(tnode, owner);
}
XPUSHs( sv_2mortal(element) );
@@ -917,7 +923,6 @@
xmlNodePtr tnode;
SV * element;
- owner = PmmOWNERPO(PmmNewNode(ctxt->node));
len = nodelist->nodeNr;
for( i ; i < len; i++){
/* we have to create a new instance of an
@@ -944,6 +949,11 @@
}
}
else {
+ if (tnode->doc) {
+ owner = PmmOWNERPO(PmmNewNode((xmlNodePtr) tnode->doc));
+ } else {
+ owner = NULL; /* self contained node */
+ }
element = PmmNodeToSv(tnode, owner);
}
XPUSHs( sv_2mortal(element) );
|