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]