Update of /cvsroot/perl-xml/XML-LibXML-XPathContext
In directory sc8-pr-cvs1:/tmp/cvs-serv858
Modified Files:
XPathContext.xs Changes
Log Message:
fixed bugs in new(), setContextNode(), and register* causing loosing
stored context data passed from a variable if the variable itself gets
changed
Index: XPathContext.xs
===================================================================
RCS file: /cvsroot/perl-xml/XML-LibXML-XPathContext/XPathContext.xs,v
retrieving revision 1.30
retrieving revision 1.31
diff -u -d -r1.30 -r1.31
--- XPathContext.xs 4 Apr 2003 11:07:28 -0000 1.30
+++ XPathContext.xs 4 Apr 2003 18:42:59 -0000 1.31
@@ -451,8 +451,11 @@
croak("XPathContext: failed to allocate proxy object");
}
- XPathContextDATA(ctxt)->node = pnode;
- if (SvOK(pnode)) SvREFCNT_inc(pnode);
+ if (SvOK(pnode)) {
+ XPathContextDATA(ctxt)->node = newSVsv(pnode);
+ } else {
+ XPathContextDATA(ctxt)->node = &PL_sv_undef;
+ }
XPathContextDATA(ctxt)->lock = 0;
XPathContextDATA(ctxt)->pool = NULL;
@@ -537,9 +540,10 @@
if (XPathContextDATA(ctxt)->node && SvOK(XPathContextDATA(ctxt)->node)) {
SvREFCNT_dec(XPathContextDATA(ctxt)->node);
}
- XPathContextDATA(ctxt)->node = pnode;
if (SvOK(pnode)) {
- SvREFCNT_inc(pnode);
+ XPathContextDATA(ctxt)->node = newSVsv(pnode);
+ } else {
+ XPathContextDATA(ctxt)->node = &PL_sv_undef;
}
void
@@ -615,8 +619,8 @@
if (SvOK(lookup_func)) {
if ( SvROK(lookup_func) && SvTYPE(SvRV(lookup_func)) == SVt_PVCV ) {
pfdr = newRV_inc((SV*) newAV());
- av_push((AV *)SvRV(pfdr), SvREFCNT_inc(lookup_func));
- av_push((AV *)SvRV(pfdr), SvREFCNT_inc(lookup_data));
+ av_push((AV *)SvRV(pfdr), newSVsv(lookup_func));
+ av_push((AV *)SvRV(pfdr), newSVsv(lookup_data));
} else {
croak("XPathContext: 1st argument is not a CODE reference");
}
@@ -691,7 +695,7 @@
strkey = SvPV(key, len);
/* warn("Trying to store function '%s' in %d\n", strkey, pfdr); */
if (SvOK(func)) {
- hv_store((HV *)SvRV(pfdr),strkey, len, SvREFCNT_inc(func), 0);
+ hv_store((HV *)SvRV(pfdr),strkey, len, newSVsv(func), 0);
} else {
/* unregister */
hv_delete((HV *)SvRV(pfdr),strkey, len, G_DISCARD);
Index: Changes
===================================================================
RCS file: /cvsroot/perl-xml/XML-LibXML-XPathContext/Changes,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -d -r1.5 -r1.6
--- Changes 4 Apr 2003 11:07:28 -0000 1.5
+++ Changes 4 Apr 2003 18:43:02 -0000 1.6
@@ -4,7 +4,9 @@
Not in CVS
-* minor bug fix for new() without context node
+* fixed bugs in new(), setContextNode(), and register* causing loosing
+stored context data passed from a variable if the variable itself gets
+changed
0.02 Fri Apr 4 2003
|