[Date Prev][Date Next] [Thread Prev][Thread Next]
[Thread Index]
[Date Index]
[Author Index]
Re: [xml] Improper Type Returned For Repeated Attribute Declaration
- From: Daniel Veillard <veillard redhat com>
- To: ashwin sinha <4shw1ns1nh4 gmail com>
- Cc: xml gnome org
- Subject: Re: [xml] Improper Type Returned For Repeated Attribute Declaration
- Date: Wed, 9 Jan 2008 23:08:05 -0500
On Thu, Jan 10, 2008 at 01:49:42AM +0530, ashwin sinha wrote:
>
> On Jan 8, 2008 8:26 PM, Daniel Veillard <[1]veillard redhat com>
> wrote:
>
> On Tue, Jan 08, 2008 at 08:02:29PM +0530, Ashwin wrote:
> >
> > Hi,
> >
> > In the attached file the attribute a1 is declared twice
> in the
> > internal subset. The draft (XML 1.0) says that this is ok,
> however it
> > is binding that the type of the attribute value should be taken
> as the
> > first one which occurs in the definition, in this case CDATA
> occurs
> > before Nmtokens therefore the type of a1 should be CDATA.
> However,
> > this is not the case, while parsing the type associated with
> a1 is
> > NMTOKENS and normalization is performed on the attribute
> value
> > according to the rules specified in the XML draft. However,
> ideally in
> > this case there should be no normalization and a1 should be
> treated as
> > CDATA.
>
> >Hum, yes there is a problem in this edge case:
> > - You will notice that when saving the document xmllint will
> not
> > output the superfluous NMTOKENS definition in the internal
> subset,
> > so it seems libxml2 does not store it, which looks good
> > - but as you noted the attribute value is normalized and that's
> not
> > okay. If one comment out the NMTOKENS definition in the
> internal subset
> > then the value is not normalized, which is the expected
> behaviour.
> >So for some reason the NMTOKENS information is not completely
> dropped
> > at parse time and retained and influence the parsing of the
> attribute.
> > I guess using a debugger and following the attribute processing
> in the
> > start tag SAX handler should allow to find this out quickly, I'm
> on
> > the road at the moment, not sure I will be able to spend time on
> it quickly
> > but if you can look for this it would be nice to get this fixed,
> > thanks for the report, ideally the document should be stored in
> the regression
> > suite once the bug is fixed,
>
>
> Hi,
> The above problem occurs because on encountering the second a1
> attribute, even though its a duplicate the parser still adds it to the
> hash list using xmlAddSpecialAttr, and then while retrieving using the
> hash key it fetches the most recent entry of a1 from the hash
> list(which happens to be the 2nd Nmtoken a1 entry.)
>
> I am hoping to fix the problem by adding a global flag which i
> will set in case a duplicate attr value is enountered (the check for
> duplicate attr value is being done in valid.c), and adding this flag
> to the if check before calling the xmlAddSpecialAttr function. Is
> there any potiential problem with this fix?
yes global state is really a problem in a library, this should really
be avoided, I don't think this scheme can work well, instead the error
of duplication should be caught, andpropagated back to the place where
xmlAddSpecialAttr is called.
I will look at this probably tomorrow morning,
Daniel
--
Red Hat Virtualization group http://redhat.com/virtualization/
Daniel Veillard | virtualization library http://libvirt.org/
veillard redhat com | libxml GNOME XML XSLT toolkit http://xmlsoft.org/
http://veillard.com/ | Rpmfind RPM search engine http://rpmfind.net/
[Date Prev][Date Next] [Thread Prev][Thread Next]
[Thread Index]
[Date Index]
[Author Index]