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

Reply via email to