[PR] report over-long float and double as invalid in validateL exical [poi-xmlbeans]
aizu-m (via GitHub) <[email protected]>
| Newsgroups | gmane.comp.jakarta.poi.devel |
|---|---|
| Message-ID | <[email protected]> |
aizu-m opened a new pull request, #92:
URL: https://github.com/apache/poi-xmlbeans/pull/92
java.lang.IllegalArgumentException: Number has more than 1024 characters
at org.apache.xmlbeans.impl.util.MathUtil.parseAsFloat(MathUtil.java:126)
at org.apache.xmlbeans.impl.values.JavaFloatHolder.validateLexical(JavaFloatHolder.java:71)
at org.apache.xmlbeans.impl.validator.Validator.validateAtomicType(Validator.java:1125)
Found this feeding long numeric text through validate(). A float or double literal longer than the XmlOptions maxNumberOfCharsForNumbers cap (1024 by default) reaches MathUtil.parseAsFloat/parseAsDouble, which enforce the cap by throwing IllegalArgumentException. validateLexical in JavaFloatHolder and JavaDoubleHolder only catches NumberFormatException, so the exception leaves doc.validate() instead of being recorded as an XmlError.
Two observations. validate() throws rather than returning false. And a union such as `<xs:union memberTypes="xs:double xs:string"/>` rejects a value that is valid against xs:string, because the validator probes the double member first and the exception escapes the member loop.
NumberFormatException is a subclass of IllegalArgumentException, so widening the catch keeps every existing invalid-lexical case and folds the length cap into a reported error. Regression test drives a 1025-char float and double through validate().
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]