You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: lib/Parser/RegexParser.cpp
+14-20Lines changed: 14 additions & 20 deletions
Original file line number
Diff line number
Diff line change
@@ -1529,7 +1529,13 @@ namespace UnifiedRegex
1529
1529
elseif (ECLookahead() == 'c')
1530
1530
{
1531
1531
if (standardEncodedChars->IsLetter(ECLookahead(1))) // terminating 0 is not a letter
1532
+
{
1532
1533
ECConsume(2);
1534
+
}
1535
+
else
1536
+
{
1537
+
DeferredFailIfUnicode(JSERR_RegExpInvalidEscape);
1538
+
}
1533
1539
returnfalse;
1534
1540
}
1535
1541
else
@@ -2494,6 +2500,8 @@ namespace UnifiedRegex
2494
2500
}
2495
2501
else
2496
2502
{
2503
+
DeferredFailIfUnicode(JSERR_RegExpInvalidEscape); // Fail in unicode mode for non-letter escaped control characters according to 262 Annex-B RegExp grammar SPEC #prod-annexB-Term
assert.throws(()=>eval("\"\".match(/[\\c]/u)"),SyntaxError,"Expected an error due to non-letters being disallowed from control character when unicode flag present",
142
+
"Invalid regular expression: invalid escape in unicode pattern");
143
+
assert.throws(()=>eval("\"\".match(/[\\c-d]/u)"),SyntaxError,"Expected an error due to non-letters being disallowed from control character when unicode flag present",
144
+
"Invalid regular expression: invalid escape in unicode pattern");
145
+
assert.throws(()=>eval("\"\".match(/[ab\\c_$]/u)"),SyntaxError,"Expected an error due to non-letters being disallowed from control character when unicode flag present",
146
+
"Invalid regular expression: invalid escape in unicode pattern");
147
+
assert.throws(()=>eval("\"\".match(/[ab\\c\\d]/u)"),SyntaxError,"Expected an error due to non-letters being disallowed from control character when unicode flag present",
148
+
"Invalid regular expression: invalid escape in unicode pattern");
149
+
assert.throws(()=>eval("\"\".match(/[ab\\c3]/u)"),SyntaxError,"Expected an error due to non-letters being disallowed from control character when unicode flag present",
150
+
"Invalid regular expression: invalid escape in unicode pattern");
151
+
152
+
re=/\cAg/u;//'A' = ascii x41
153
+
matchRegExp("abcdefghi",re,null);
154
+
matchRegExp("\\\\",re,null);
155
+
matchRegExp("////",re,null);
156
+
matchRegExp("\x01\x01gg\x02\x04ggg",re,"\x01g");
157
+
158
+
re=/\czA/u;//'z' = ascii x7A
159
+
matchRegExp("abcdefghi",re,null);
160
+
matchRegExp("\\\\",re,null);
161
+
matchRegExp("////",re,null);
162
+
matchRegExp("YZA\x1aABC",re,"\x1aA");
163
+
164
+
assert.throws(()=>eval("\"\".match(/\\c/u)"),SyntaxError,"Expected an error due to non-letters being disallowed from control character when unicode flag present",
165
+
"Invalid regular expression: invalid escape in unicode pattern");
166
+
assert.throws(()=>eval("\"\".match(/\\c-d/u)"),SyntaxError,"Expected an error due to non-letters being disallowed from control character when unicode flag present",
167
+
"Invalid regular expression: invalid escape in unicode pattern");
168
+
assert.throws(()=>eval("\"\".match(/ab\\c_$/u)"),SyntaxError,"Expected an error due to non-letters being disallowed from control character when unicode flag present",
169
+
"Invalid regular expression: invalid escape in unicode pattern");
170
+
assert.throws(()=>eval("\"\".match(/ab\\c\\d/u)"),SyntaxError,"Expected an error due to non-letters being disallowed from control character when unicode flag present",
171
+
"Invalid regular expression: invalid escape in unicode pattern");
172
+
assert.throws(()=>eval("\"\".match(/ab\\c3/u)"),SyntaxError,"Expected an error due to non-letters being disallowed from control character when unicode flag present",
173
+
"Invalid regular expression: invalid escape in unicode pattern");
174
+
}
175
+
},
176
+
{
177
+
name : "Control character edge cases",
178
+
body : function()
179
+
{
180
+
re=/[\c-g]+/;//'-' = ascii x2D
181
+
matchRegExp("abcdefghi",re,"cdefg");
182
+
matchRegExp("\\\\",re,"\\\\");
183
+
matchRegExp("////",re,null);
184
+
matchRegExp("\x0d",re,null);
185
+
matchRegExp("aobd\\f\\d",re,"d\\f\\d");
186
+
187
+
re=/[\c-]+/;//'-' = ascii x2D
188
+
matchRegExp("abcdefghi",re,"c");
189
+
matchRegExp("\x0d",re,null);
190
+
matchRegExp("\\\\",re,"\\\\");
191
+
matchRegExp("////",re,null);
192
+
matchRegExp("aobd\\f\\d",re,"\\");
193
+
194
+
assert.throws(()=>eval("\"\".match(/[\\c-a]/)"),SyntaxError,"Expected an error due to 'c-a' being an invalid range.","Invalid range in character set");
0 commit comments