Author: fanningpj
Date: Tue Jun 23 12:17:31 2026
New Revision: 1935582

Log:
use correct error key for out of range hex escape. Thanks to aizu-m. This 
closes #68

Modified:
   xmlbeans/trunk/src/main/java/org/apache/xmlbeans/impl/regex/RegexParser.java
   xmlbeans/trunk/src/test/java/misc/checkin/RegularExpressionTest.java

Modified: 
xmlbeans/trunk/src/main/java/org/apache/xmlbeans/impl/regex/RegexParser.java
==============================================================================
--- 
xmlbeans/trunk/src/main/java/org/apache/xmlbeans/impl/regex/RegexParser.java    
    Tue Jun 23 12:10:03 2026        (r1935581)
+++ 
xmlbeans/trunk/src/main/java/org/apache/xmlbeans/impl/regex/RegexParser.java    
    Tue Jun 23 12:17:31 2026        (r1935582)
@@ -1054,7 +1054,7 @@ class RegexParser {
               if (this.read() != T_CHAR || (v2 = hexChar(this.chardata)) < 0)
                   throw ex("parser.descape.1", this.offset - 1);
               uv2 = uv2 * 16 + v2;
-              if (uv2 > Token.UTF16_MAX) throw ex("parser.descappe.4", 
this.offset - 1);
+              if (uv2 > Token.UTF16_MAX) throw ex("parser.descape.4", 
this.offset - 1);
               c = uv2;
               break;
           }

Modified: xmlbeans/trunk/src/test/java/misc/checkin/RegularExpressionTest.java
==============================================================================
--- xmlbeans/trunk/src/test/java/misc/checkin/RegularExpressionTest.java        
Tue Jun 23 12:10:03 2026        (r1935581)
+++ xmlbeans/trunk/src/test/java/misc/checkin/RegularExpressionTest.java        
Tue Jun 23 12:17:31 2026        (r1935582)
@@ -47,6 +47,20 @@ public class RegularExpressionTest {
     }
 
     @Test
+    void testHexEscapeOverflowErrorKey() {
+        // a \v escape (6 hex digits) whose value is above U+10FFFF was 
reported with
+        // the error key "parser.descappe.4", which is not in the message 
bundle, so
+        // ResourceBundle.getString threw MissingResourceException instead of 
the
+        // ParseException callers expect. The sibling \x{...} path already 
reports the
+        // same condition cleanly via "parser.descape.4".
+        assertThrows(ParseException.class, () -> new 
RegularExpression("\\v110000"));
+        assertThrows(ParseException.class, () -> new 
RegularExpression("\\vFFFFFF"));
+        assertThrows(ParseException.class, () -> new 
RegularExpression("\\x{110000}"));
+        // the top of the Unicode range is still valid and must parse
+        new RegularExpression("\\v10FFFF");
+    }
+
+    @Test
     void testQuantifierOverflow() {
         // a {min,max} count larger than Integer.MAX_VALUE overflowed the int
         // accumulator. the only guard was a post-multiply min<0/max<0 check, 
so

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to