- From: merlin <merlin@baltimore.ie>
- Date: Tue, 04 Jun 2002 17:03:21 +0100
- To: w3c-ietf-xmldsig@w3.org
Thanks to the useful discussion on exclusive c14n from Aleksey and Christian, I think we can now say that there are bugs in both the Specification and the Method. It is a pity these didn't come up earlier: Ref: http://www.w3.org/Signature/Drafts/xml-exc-c14n.html 1) Bug in the Specification Consider the following document: <A xmlns="http://example.org/"> <b:B xmlns:b="http://example.org/b" xmlns=""> <C xmlns="http://example.org/"> </b:B> </A> Because we inherit xmlns="" behaviour from c14n, this will be rendered so: <A xmlns="http://example.org/"> <b:B xmlns="" xmlns:b="http://example.org/b"> <C></C> </b:B> </A> This is wrong (C is now in the wrong namespace). It should be rendered: <A xmlns="http://example.org/"> <b:B xmlns:b="http://example.org/b"> <C></C> </b:B> </A> The following addition to the Specification would correct this: 4. If the token representing the default namespace is not present in InclusiveNamespace.PrefixList, then xmlns="" is rendered with a namespace axis iff: 1. The element E that owns the namespace axis is in the node set, visibly utilizes the default namespace, and has no default namespace node in the node set 2. The nearest output ancestor of E that visibly utilizes the default namespace has a default namespace node in the node set. 2) Bug in the Method The method handles neither the default namespace being absent, nor namespace nodes being omitted correctly. 3.½: Render xmlns="" iff: 1. The default namespace is visibly utilized by the element node, or the default prefix token is present in InclusiveNamespaces.PrefixList. 2. The element does not have a default namespace node in the node set 3. The default namespace prefix is present in the dictionary ns_rendered. 3.1: s/list/dictionary/ 3.2: Push a copy of the dictionary ns_rendered onto the state stack. Add the rendered namespace nodes to ns_rendered, replacing any existing entries. Remove every prefix that is visibly utilized by the element node, but does not have a namespace node in the node set. Remove every prefix that is present in InclusiveNamespaces.PrefixList but does not have a namespace node in the node set. Recurse. This still does not render namespace nodes in InclusiveNamespace.PrefixList on elements that are not in the node set. Another addition would be necessary to support that, and my brain is becoming enfeebled. merlin
Received on Tuesday, 4 June 2002 12:03:53 UTC