Conversion.hexTo*() methods now throw IllegalArgumentException instead
of StringIndexOutOfBoundsException

Better exception messages
diff --git a/src/main/java/org/apache/commons/lang3/Conversion.java b/src/main/java/org/apache/commons/lang3/Conversion.java
index b8f805d..feec252 100644
--- a/src/main/java/org/apache/commons/lang3/Conversion.java
+++ b/src/main/java/org/apache/commons/lang3/Conversion.java
@@ -793,8 +793,9 @@ public static byte hexToByte(final String src, final int srcPos, final byte dstI
         if ((nHex - 1) * 4 + dstPos >= 8) {
             throw new IllegalArgumentException("(nHex - 1) * 4 + dstPos is greater than or equal to 8");
         }
-        if (srcPos + nHex > src.length()) {
-            throw new IllegalArgumentException(String.format("srcPos %,d, + nHex %,d  > src.length()", srcPos, nHex, src.length()));
+        if (srcPos < 0 || nHex < 0 || srcPos > src.length() - nHex) {
+            throw new IllegalArgumentException(
+                    String.format("srcPos %,d, dstInit %,d, dstPos %,d, nHex %,d, src.length() %,d", srcPos, dstInit, dstPos, nHex, src.length()));
         }
         byte out = dstInit;
         for (int i = 0; i < nHex; i++) {
diff --git a/src/test/java/org/apache/commons/lang3/ConversionTest.java b/src/test/java/org/apache/commons/lang3/ConversionTest.java
index 23c5e5d..75d6a34 100644
--- a/src/test/java/org/apache/commons/lang3/ConversionTest.java
+++ b/src/test/java/org/apache/commons/lang3/ConversionTest.java
@@ -709,6 +709,8 @@ void testHexToByte() {
         assertEquals((byte) 0x34, Conversion.hexToByte(src, 0, (byte) 0x34, 0, 0));
         assertEquals((byte) 0x84, Conversion.hexToByte(src, 17, (byte) 0x34, 4, 1));
         assertThrows(IllegalArgumentException.class, () -> Conversion.hexToByte(src, src.length(), (byte) 0, 0, 1));
+        assertThrows(IllegalArgumentException.class, () -> Conversion.hexToByte(src, Integer.MIN_VALUE, (byte) 0, 0, 1));
+        assertThrows(IllegalArgumentException.class, () -> Conversion.hexToByte(src, Integer.MAX_VALUE, (byte) 0, 0, 1));
     }
 
     /**