How do you manipulate the XML tree? If you are using "official" LibXML2 function then I believe this code should work just fine unless there is a bug in the strings dictionary.
Aleksey On 3/12/14, 10:28 AM, Frank Gross wrote: > Hi, > > I'm getting some trouble to verify a XML signature because the > xmlC14NProcessNamespacesAxis() function does a xmlNsPtr pointer > comparison to decide whether a sub node belongs to the same default > namespace as an ancestor. But if the sub node has been manipulated by > program (in my case) to point to another xmlNsPtr with same values, the > canonicalization process breaks. Wouldn't it be better to check the > namespace href values instead as in following patch ? > > diff --git a/lib-xmlsoft-libxml2/src/c14n.c > b/lib-xmlsoft-libxml2/src/c14n.c > index 9c3cad2..f73e709 100644 > --- a/lib-xmlsoft-libxml2/src/c14n.c > +++ b/lib-xmlsoft-libxml2/src/c14n.c > @@ -623,7 +623,7 @@ xmlC14NProcessNamespacesAxis(xmlC14NCtxPtr ctx, > xmlNodePtr cur, int visible) > for(ns = n->nsDef; ns != NULL; ns = ns->next) { > tmp = xmlSearchNs(cur->doc, cur, ns->prefix); > > - if((tmp == ns) && !xmlC14NIsXmlNs(ns) && xmlC14NIsVisible(ctx, > ns, cur)) { > + if((xmlStrEqual(tmp->href,ns->href)) && > (xmlStrEqual(tmp->prefix,ns->prefix)) && !xmlC14NIsXmlNs(ns) && > xmlC14NIsVisible(ctx, ns, cur)) { > already_rendered = xmlC14NVisibleNsStackFind(ctx->ns_rendered, > ns); > if(visible) { > xmlC14NVisibleNsStackAdd(ctx->ns_rendered, ns, cur); > > Regards, > Frank > _______________________________________________ xml mailing list, project page http://xmlsoft.org/ xml@gnome.org https://mail.gnome.org/mailman/listinfo/xml