[
https://issues.apache.org/jira/browse/LANG-1645?focusedWorklogId=561392&page=com.atlassian.jira.plugin.system.issuetabpanels:worklog-tabpanel#worklog-561392
]
ASF GitHub Bot logged work on LANG-1645:
----------------------------------------
Author: ASF GitHub Bot
Created on: 05/Mar/21 11:46
Start Date: 05/Mar/21 11:46
Worklog Time Spent: 10m
Work Description: asfgit closed pull request #728:
URL: https://github.com/apache/commons-lang/pull/728
----------------------------------------------------------------
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.
For queries about this service, please contact Infrastructure at:
[email protected]
Issue Time Tracking
-------------------
Worklog Id: (was: 561392)
Time Spent: 0.5h (was: 20m)
> NumberUtils.createNumber/createBigInteger fails on hexidecimal integers
> prefixed with +
> ---------------------------------------------------------------------------------------
>
> Key: LANG-1645
> URL: https://issues.apache.org/jira/browse/LANG-1645
> Project: Commons Lang
> Issue Type: Bug
> Components: lang.math.*
> Affects Versions: 3.12.0
> Reporter: Alex Herbert
> Assignee: Alex Herbert
> Priority: Minor
> Time Spent: 0.5h
> Remaining Estimate: 0h
>
> The Java Language Specification allows an optional sign prefix for a number
> as + or -.
> A + sign before a hex integer is not recognised by createNumber and
> createBigInteger but is recognised by isCreatable, createInteger and
> createLong. The two later functions delegate to Java's decode() function that
> handles an optional leading +.
> The following demonstrates the tests that fail but would pass if the leading
> '+' is removed.
> {code:java}
> @Test
> void testCreatePositiveHexInteger() {
> // Hex is only supported for integers so no test for hex floating
> point formats
> assertTrue(NumberUtils.isCreatable("+0xF"));
> assertTrue(NumberUtils.isCreatable("+0xFFFFFFFF"));
> assertTrue(NumberUtils.isCreatable("+0xFFFFFFFFFFFFFFFFF"));
> assertEquals(Integer.decode("+0xF"),
> NumberUtils.createInteger("+0xF"));
> assertEquals(Long.decode("+0xFFFFFFFF"),
> NumberUtils.createLong("+0xFFFFFFFF"));
> assertEquals(new BigInteger("+FFFFFFFFFFFFFFFF", 16),
> NumberUtils.createBigInteger("0xFFFFFFFFFFFFFFFF"));
> try {
> assertEquals(new BigInteger("+FFFFFFFFFFFFFFFF", 16),
> NumberUtils.createBigInteger("+0xFFFFFFFFFFFFFFFF"));
> Assertions.fail("This should be possible but it is not");
> } catch (NumberFormatException ex) {
> // This should not happen
> }
> assertEquals(Integer.decode("+0xF"),
> NumberUtils.createNumber("0xF"));
> try {
> assertEquals(Integer.decode("+0xF"),
> NumberUtils.createNumber("+0xF"));
> Assertions.fail("This should be possible but it is not");
> } catch (NumberFormatException ex) {
> // This should not happen
> }
> assertEquals(Long.decode("+0xFFFFFFFF"),
> NumberUtils.createNumber("0xFFFFFFFF"));
> try {
> assertEquals(Long.decode("+0xFFFFFFFF"),
> NumberUtils.createNumber("+0xFFFFFFFF"));
> Assertions.fail("This should be possible but it is not");
> } catch (NumberFormatException ex) {
> // This should not happen
> }
> assertEquals(new BigInteger("+FFFFFFFFFFFFFFFF", 16),
> NumberUtils.createNumber("0xFFFFFFFFFFFFFFFF"));
> try {
> assertEquals(new BigInteger("+FFFFFFFFFFFFFFFF", 16),
> NumberUtils.createNumber("+0xFFFFFFFFFFFFFFFF"));
> Assertions.fail("This should be possible but it is not");
> } catch (NumberFormatException ex) {
> // This should not happen
> }
> }
> {code}
> A simple fix is to check for a leading '+' character and advance all
> processing past this character.
>
--
This message was sent by Atlassian Jira
(v8.3.4#803005)