Re: [xml] libxml2 version 2.9.0: xpath.c:xmlXPathStringEvalNumber() - not 100% fails to parse float with leading '+'
- From: Daniel Veillard <veillard redhat com>
- To: "Kuhnke, Christoph (I/EF-56, extern)" <extern christoph kuhnke audi de>
- Cc: "'xml gnome org'" <xml gnome org>
- Subject: Re: [xml] libxml2 version 2.9.0: xpath.c:xmlXPathStringEvalNumber() - not 100% fails to parse float with leading '+'
- Date: Wed, 8 May 2013 20:18:06 +0800
On Mon, May 06, 2013 at 12:41:22PM +0000, Kuhnke, Christoph (I/EF-56, extern) wrote:
Dear creators of libxml2,
Hallo,
might be better to subscribe to the list so i don't have to dig your
messages in the mailing-list bounces, which I tend to forget doing !
I think I found a slight mistake in function xpath.c:xmlXPathStringEvalNumber()
of libxml2 version 2.9.0.
For data type "float" in xml files resp. xml schemas
[1] states "The mantissa must be a decimal number."
[2] contains details:
An optional leading sign is allowed.
If the sign is omitted, "+" is assumed.
and names "+100000.00" as valid example for a decimal.
In contrast when first non-whitespace-character of it's argument is a '+',
xpath.c:xmlXPathStringEvalNumber() stops parsing and return 0.0.
To make libxml2 conform to [1] I suggest the following change:
Replace 3 lines 10098 through 10100 (incl.)
by the following 7 lines
if ((*cur != '.') && ((*cur < '0') || (*cur > '9')) && (*cur != '-') && (*cur != '+')) {
return(xmlXPathNAN);
}
if (*cur == '+') {
isneg = 0;
cur++;
}
Please let me know, what you think about my proposal.
References
[1] http://www.w3.org/TR/2004/REC-xmlschema-2-20041028/datatypes.html#float
3.2.4.1 Lexical representation
[2] http://www.w3.org/TR/2004/REC-xmlschema-2-20041028/datatypes.html#decimal
3.2.3.1 Lexical representation
Ah well I am sorry but that's the wrong reference ;-)
Surprizingly enough xpath.c:xmlXPathStringEvalNumber() is part of the
implementation of XPath (version 1),
http://www.w3.org/TR/xpath/#section-Number-Functions
"a string that consists of optional whitespace followed by an optional
minus sign followed by a Number followed by whitespace is converted to
the IEEE 754 number that is nearest (according to the IEEE 754
round-to-nearest rule) to the mathematical value represented by the
string; any other string is converted to NaN"
[30] Number ::= Digits ('.' Digits?)?
| '.' Digits
[31] Digits ::= [0-9]+
basically no "+" is allowed by XPath 1 for the beginning of numbers
so the function is I think correct.
Libxml2 actually has a xml Schemas (version 1) datatype implementation
and it does check float values, the code is in
xmlSchemaValAtomicType() in xmlschemastypes.c
see around line 2393, it does accept a leading "+"
It's a feature, not a bug, at least at the libxml2 level, at the
W3C spec level it is a slight incoherence...
Daniel
--
Daniel Veillard | Open Source and Standards, Red Hat
veillard redhat com | libxml Gnome XML XSLT toolkit http://xmlsoft.org/
http://veillard.com/ | virtualization library http://libvirt.org/
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]