From bc0517f1f5a9679ad7f0ed150feb52eaecc9fd7d Mon Sep 17 00:00:00 2001 From: Alhuda Khan Date: Mon, 3 Aug 2026 19:34:29 +0530 Subject: [PATCH] reject non-ASCII hex characters in Conversion.hexDigitToInt --- src/main/java/org/apache/commons/lang3/Conversion.java | 5 ++--- src/test/java/org/apache/commons/lang3/ConversionTest.java | 6 ++++++ 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/src/main/java/org/apache/commons/lang3/Conversion.java b/src/main/java/org/apache/commons/lang3/Conversion.java index f9041ba0df1..a128768c2f6 100644 --- a/src/main/java/org/apache/commons/lang3/Conversion.java +++ b/src/main/java/org/apache/commons/lang3/Conversion.java @@ -727,11 +727,10 @@ public static boolean[] hexDigitToBinary(final char hexChar) { * @throws IllegalArgumentException if {@code hexDigit} is not a hexadecimal digit. */ public static int hexDigitToInt(final char hexChar) { - final int digit = Character.digit(hexChar, 16); - if (digit < 0) { + if (!CharUtils.isHex(hexChar)) { throw new IllegalArgumentException("Cannot convert '" + hexChar + "' to a hexadecimal digit"); } - return digit; + return Character.digit(hexChar, 16); } /** diff --git a/src/test/java/org/apache/commons/lang3/ConversionTest.java b/src/test/java/org/apache/commons/lang3/ConversionTest.java index 784ba323596..67828318fba 100644 --- a/src/test/java/org/apache/commons/lang3/ConversionTest.java +++ b/src/test/java/org/apache/commons/lang3/ConversionTest.java @@ -688,6 +688,11 @@ void testHexDigitToInt() { assertEquals(15, Conversion.hexDigitToInt('F')); assertEquals(15, Conversion.hexDigitToInt('f')); assertIllegalArgumentException(() -> Conversion.hexDigitToInt('G')); + assertIllegalArgumentException(() -> Conversion.hexDigitToInt('\uFF41')); // FULLWIDTH LATIN SMALL LETTER A + assertIllegalArgumentException(() -> Conversion.hexDigitToInt('\uFF26')); // FULLWIDTH LATIN CAPITAL LETTER F + assertIllegalArgumentException(() -> Conversion.hexDigitToInt('\uFF19')); // FULLWIDTH DIGIT NINE + assertIllegalArgumentException(() -> Conversion.hexDigitToInt('\u0669')); // ARABIC-INDIC DIGIT NINE + assertIllegalArgumentException(() -> Conversion.hexDigitToInt('\u096B')); // DEVANAGARI DIGIT FIVE } /** @@ -723,6 +728,7 @@ void testHexToInt() { assertThrows(StringIndexOutOfBoundsException.class, () -> Conversion.hexToInt(src, Integer.MIN_VALUE, 0, 0, 1)); assertThrows(StringIndexOutOfBoundsException.class, () -> Conversion.hexToInt(src, Integer.MAX_VALUE, 0, 0, 1)); assertIllegalArgumentException(() -> Conversion.hexToInt(src, Integer.MAX_VALUE, 0, 0, Integer.SIZE)); + assertIllegalArgumentException(() -> Conversion.hexToInt("\uFF41\uFF41", 0, 0, 0, 2)); } /**