[ 
https://issues.apache.org/jira/browse/LANG-1821?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

尹茂椿萱 updated LANG-1821:
-----------------------
    Description: 
According to Java language syntax, hexadecimal numeric literals can be combined 
with type qualifiers such as 'L' or 'l'. For example:

```java
long a = 0Xdefl; // valid Java literal, evaluates to 3567

However, {{NumberUtils.isCreatable(String)}} does not recognize such inputs as 
valid numbers.

This suggests an inconsistency between the documented capabilities and the 
actual implementation.
h2. Reproduction

 
 
import org.apache.commons.lang3.math.NumberUtils;

public class Test {
public static void main(String[] args)

{ long a = 0Xdefl; System.out.println(a); // 3567 
System.out.println(NumberUtils.isCreatable("0Xdefl")); // false }

}
 
h2. Additional Cases

The following cases illustrate the inconsistency more clearly:
 
 
NumberUtils.isCreatable("123L"); // true
NumberUtils.isCreatable("0xdef"); // true
NumberUtils.isCreatable("0xdefL"); // false (unexpected)
NumberUtils.isCreatable("0XDEFl"); // false (unexpected)
 
h2. Expected Behavior

Inputs such as {{"0xdefL"}} and {{"0Xdefl"}} should be recognized as valid 
numbers, and {{isCreatable}} should return {{{}true{}}}.
h2. Actual Behavior

{{NumberUtils.isCreatable("0Xdefl")}} returns {{{}false{}}}.
h2. Documentation Reference

The Javadoc for {{isCreatable}} states that:
 * Hexadecimal numbers with {{0x}} or {{0X}} prefixes are supported.
 * Numbers with type qualifiers (e.g., {{{}123L{}}}) are supported.

However, the combination of these two features (hexadecimal + type qualifier) 
is not handled correctly.
h2. Impact

This issue may lead to incorrect validation results when processing numeric 
strings that are valid Java literals, especially in contexts where hexadecimal 
values with type qualifiers are expected.
h2. Possible Cause

The parsing logic in {{isCreatable}} appears to handle hexadecimal prefixes and 
type qualifiers independently, but does not correctly support their combination.
h2. Suggested Fix

Extend the parsing logic to allow type qualifiers ({{{}L{}}}/{{{}l{}}}) after 
hexadecimal numeric literals, consistent with Java syntax and existing support 
for decimal numbers with qualifiers.

  was:
Description

According to Java language syntax, hexadecimal numeric literals can be combined 
with type qualifiers such as 'L' or 'l'. For example:

```java
long a = 0Xdefl; // valid Java literal, evaluates to 3567

However, {{NumberUtils.isCreatable(String)}} does not recognize such inputs as 
valid numbers.

This suggests an inconsistency between the documented capabilities and the 
actual implementation.
h2. Reproduction

 
 
import org.apache.commons.lang3.math.NumberUtils;

public class Test {
public static void main(String[] args)

{ long a = 0Xdefl; System.out.println(a); // 3567 
System.out.println(NumberUtils.isCreatable("0Xdefl")); // false }

}
 
h2. Additional Cases

The following cases illustrate the inconsistency more clearly:
 
 
NumberUtils.isCreatable("123L"); // true
NumberUtils.isCreatable("0xdef"); // true
NumberUtils.isCreatable("0xdefL"); // false (unexpected)
NumberUtils.isCreatable("0XDEFl"); // false (unexpected)
 
h2. Expected Behavior

Inputs such as {{"0xdefL"}} and {{"0Xdefl"}} should be recognized as valid 
numbers, and {{isCreatable}} should return {{{}true{}}}.
h2. Actual Behavior

{{NumberUtils.isCreatable("0Xdefl")}} returns {{{}false{}}}.
h2. Documentation Reference

The Javadoc for {{isCreatable}} states that:
 * Hexadecimal numbers with {{0x}} or {{0X}} prefixes are supported.
 * Numbers with type qualifiers (e.g., {{{}123L{}}}) are supported.

However, the combination of these two features (hexadecimal + type qualifier) 
is not handled correctly.
h2. Impact

This issue may lead to incorrect validation results when processing numeric 
strings that are valid Java literals, especially in contexts where hexadecimal 
values with type qualifiers are expected.
h2. Possible Cause

The parsing logic in {{isCreatable}} appears to handle hexadecimal prefixes and 
type qualifiers independently, but does not correctly support their combination.
h2. Suggested Fix

Extend the parsing logic to allow type qualifiers ({{{}L{}}}/{{{}l{}}}) after 
hexadecimal numeric literals, consistent with Java syntax and existing support 
for decimal numbers with qualifiers.


> NumberUtils.isCreatable fails for hexadecimal numbers with long type qualifier
> ------------------------------------------------------------------------------
>
>                 Key: LANG-1821
>                 URL: https://issues.apache.org/jira/browse/LANG-1821
>             Project: Commons Lang
>          Issue Type: Bug
>    Affects Versions: 3.20.0
>            Reporter: 尹茂椿萱
>            Priority: Major
>
> According to Java language syntax, hexadecimal numeric literals can be 
> combined with type qualifiers such as 'L' or 'l'. For example:
> ```java
> long a = 0Xdefl; // valid Java literal, evaluates to 3567
> However, {{NumberUtils.isCreatable(String)}} does not recognize such inputs 
> as valid numbers.
> This suggests an inconsistency between the documented capabilities and the 
> actual implementation.
> h2. Reproduction
>  
>  
> import org.apache.commons.lang3.math.NumberUtils;
> public class Test {
> public static void main(String[] args)
> { long a = 0Xdefl; System.out.println(a); // 3567 
> System.out.println(NumberUtils.isCreatable("0Xdefl")); // false }
> }
>  
> h2. Additional Cases
> The following cases illustrate the inconsistency more clearly:
>  
>  
> NumberUtils.isCreatable("123L"); // true
> NumberUtils.isCreatable("0xdef"); // true
> NumberUtils.isCreatable("0xdefL"); // false (unexpected)
> NumberUtils.isCreatable("0XDEFl"); // false (unexpected)
>  
> h2. Expected Behavior
> Inputs such as {{"0xdefL"}} and {{"0Xdefl"}} should be recognized as valid 
> numbers, and {{isCreatable}} should return {{{}true{}}}.
> h2. Actual Behavior
> {{NumberUtils.isCreatable("0Xdefl")}} returns {{{}false{}}}.
> h2. Documentation Reference
> The Javadoc for {{isCreatable}} states that:
>  * Hexadecimal numbers with {{0x}} or {{0X}} prefixes are supported.
>  * Numbers with type qualifiers (e.g., {{{}123L{}}}) are supported.
> However, the combination of these two features (hexadecimal + type qualifier) 
> is not handled correctly.
> h2. Impact
> This issue may lead to incorrect validation results when processing numeric 
> strings that are valid Java literals, especially in contexts where 
> hexadecimal values with type qualifiers are expected.
> h2. Possible Cause
> The parsing logic in {{isCreatable}} appears to handle hexadecimal prefixes 
> and type qualifiers independently, but does not correctly support their 
> combination.
> h2. Suggested Fix
> Extend the parsing logic to allow type qualifiers ({{{}L{}}}/{{{}l{}}}) after 
> hexadecimal numeric literals, consistent with Java syntax and existing 
> support for decimal numbers with qualifiers.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to