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/
[email protected]
https://mail.gnome.org/mailman/listinfo/xml