From 91ad22a010c328c6701244269a458765dc725599 Mon Sep 17 00:00:00 2001 From: kevin9327 <5299031+kevin9327@users.noreply.github.com> Date: Thu, 12 Nov 2026 04:21:44 +0900 Subject: [PATCH] fix(conversions): reject non-hex digits in HexToOct.hexToDecimal --- src/main/java/com/thealgorithms/conversions/HexToOct.java | 4 ++++ .../java/com/thealgorithms/conversions/HexToOctTest.java | 8 ++++++++ 2 files changed, 12 insertions(+) diff --git a/src/main/java/com/thealgorithms/conversions/HexToOct.java b/src/main/java/com/thealgorithms/conversions/HexToOct.java index d3a672d37424..ef696d305ee4 100644 --- a/src/main/java/com/thealgorithms/conversions/HexToOct.java +++ b/src/main/java/com/thealgorithms/conversions/HexToOct.java @@ -14,6 +14,7 @@ private HexToOct() { * * @param hex The Hexadecimal number as a String. * @return The Decimal equivalent as an integer. + * @throws IllegalArgumentException if the string contains a character that is not a hexadecimal digit */ public static int hexToDecimal(String hex) { String hexDigits = "0123456789ABCDEF"; @@ -23,6 +24,9 @@ public static int hexToDecimal(String hex) { for (int i = 0; i < hex.length(); i++) { char hexChar = hex.charAt(i); int digitValue = hexDigits.indexOf(hexChar); + if (digitValue == -1) { + throw new IllegalArgumentException("Invalid hexadecimal digit: " + hexChar); + } decimalValue = 16 * decimalValue + digitValue; } diff --git a/src/test/java/com/thealgorithms/conversions/HexToOctTest.java b/src/test/java/com/thealgorithms/conversions/HexToOctTest.java index b3f94b19b6e6..5793b640316b 100644 --- a/src/test/java/com/thealgorithms/conversions/HexToOctTest.java +++ b/src/test/java/com/thealgorithms/conversions/HexToOctTest.java @@ -1,6 +1,7 @@ package com.thealgorithms.conversions; import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertThrows; import org.junit.jupiter.api.Test; @@ -30,4 +31,11 @@ public void testHexToOctal() { assertEquals(0, HexToOct.hexToOctal("0")); assertEquals(7777, HexToOct.hexToOctal("FFF")); } + + @Test + public void testInvalidHexDigitThrows() { + assertThrows(IllegalArgumentException.class, () -> HexToOct.hexToDecimal("1G")); + assertThrows(IllegalArgumentException.class, () -> HexToOct.hexToDecimal("0x1A")); + assertThrows(IllegalArgumentException.class, () -> HexToOct.hexToOctal("Z")); + } }