Title: [280825] trunk
- Revision
- 280825
- Author
- [email protected]
- Date
- 2021-08-09 23:56:17 -0700 (Mon, 09 Aug 2021)
Log Message
[JSC] super-Latin1 white space and line terminator after regular _expression_ literal misinterpreted as flags
https://bugs.webkit.org/show_bug.cgi?id=227944
Reviewed by Alexey Shvayka.
JSTests:
* test262/expectations.yaml:
Source/_javascript_Core:
There are non-Latin1 white-spaces and line-terminators, but Lexer::scanRegExp's code did not assume that.
As a result, if there is a non-Latin1 white-spaces or line-terminators after RegExp, we raise SyntaxError
while this is valid. This patch fixes that.
* parser/Lexer.cpp:
(JSC::Lexer<T>::scanRegExp):
Modified Paths
Diff
Modified: trunk/JSTests/ChangeLog (280824 => 280825)
--- trunk/JSTests/ChangeLog 2021-08-10 03:33:03 UTC (rev 280824)
+++ trunk/JSTests/ChangeLog 2021-08-10 06:56:17 UTC (rev 280825)
@@ -1,3 +1,12 @@
+2021-08-09 Yusuke Suzuki <[email protected]>
+
+ [JSC] super-Latin1 white space and line terminator after regular _expression_ literal misinterpreted as flags
+ https://bugs.webkit.org/show_bug.cgi?id=227944
+
+ Reviewed by Alexey Shvayka.
+
+ * test262/expectations.yaml:
+
2021-08-08 Yusuke Suzuki <[email protected]>
[JSC] Clean up test262 expectations
Modified: trunk/JSTests/test262/expectations.yaml (280824 => 280825)
--- trunk/JSTests/test262/expectations.yaml 2021-08-10 03:33:03 UTC (rev 280824)
+++ trunk/JSTests/test262/expectations.yaml 2021-08-10 06:56:17 UTC (rev 280825)
@@ -1960,57 +1960,3 @@
test/language/statements/variable/dstr/ary-ptrn-elem-id-iter-val-array-prototype.js:
default: 'Test262Error: Expected SameValue(«3», «42») to be true'
strict mode: 'Test262Error: Expected SameValue(«3», «42») to be true'
-test/language/white-space/after-regular-_expression_-literal-em-quad.js:
- default: "SyntaxError: Invalid non-latin character in RexExp literal's flags '/x/g '"
- strict mode: "SyntaxError: Invalid non-latin character in RexExp literal's flags '/x/g '"
-test/language/white-space/after-regular-_expression_-literal-em-space.js:
- default: "SyntaxError: Invalid non-latin character in RexExp literal's flags '/x/g '"
- strict mode: "SyntaxError: Invalid non-latin character in RexExp literal's flags '/x/g '"
-test/language/white-space/after-regular-_expression_-literal-en-quad.js:
- default: "SyntaxError: Invalid non-latin character in RexExp literal's flags '/x/g '"
- strict mode: "SyntaxError: Invalid non-latin character in RexExp literal's flags '/x/g '"
-test/language/white-space/after-regular-_expression_-literal-en-space.js:
- default: "SyntaxError: Invalid non-latin character in RexExp literal's flags '/x/g '"
- strict mode: "SyntaxError: Invalid non-latin character in RexExp literal's flags '/x/g '"
-test/language/white-space/after-regular-_expression_-literal-figure-space.js:
- default: "SyntaxError: Invalid non-latin character in RexExp literal's flags '/x/g '"
- strict mode: "SyntaxError: Invalid non-latin character in RexExp literal's flags '/x/g '"
-test/language/white-space/after-regular-_expression_-literal-four-per-em-space.js:
- default: "SyntaxError: Invalid non-latin character in RexExp literal's flags '/x/g '"
- strict mode: "SyntaxError: Invalid non-latin character in RexExp literal's flags '/x/g '"
-test/language/white-space/after-regular-_expression_-literal-hair-space.js:
- default: "SyntaxError: Invalid non-latin character in RexExp literal's flags '/x/g '"
- strict mode: "SyntaxError: Invalid non-latin character in RexExp literal's flags '/x/g '"
-test/language/white-space/after-regular-_expression_-literal-ideographic-space.js:
- default: "SyntaxError: Invalid non-latin character in RexExp literal's flags '/x/g '"
- strict mode: "SyntaxError: Invalid non-latin character in RexExp literal's flags '/x/g '"
-test/language/white-space/after-regular-_expression_-literal-line-separator.js:
- default: "SyntaxError: Invalid non-latin character in RexExp literal's flags '/x/g
'"
- strict mode: "SyntaxError: Invalid non-latin character in RexExp literal's flags '/x/g
'"
-test/language/white-space/after-regular-_expression_-literal-medium-mathematical-space.js:
- default: "SyntaxError: Invalid non-latin character in RexExp literal's flags '/x/g '"
- strict mode: "SyntaxError: Invalid non-latin character in RexExp literal's flags '/x/g '"
-test/language/white-space/after-regular-_expression_-literal-nnbsp.js:
- default: "SyntaxError: Invalid non-latin character in RexExp literal's flags '/x/g '"
- strict mode: "SyntaxError: Invalid non-latin character in RexExp literal's flags '/x/g '"
-test/language/white-space/after-regular-_expression_-literal-ogham-space.js:
- default: "SyntaxError: Invalid non-latin character in RexExp literal's flags '/x/g '"
- strict mode: "SyntaxError: Invalid non-latin character in RexExp literal's flags '/x/g '"
-test/language/white-space/after-regular-_expression_-literal-paragraph-separator.js:
- default: "SyntaxError: Invalid non-latin character in RexExp literal's flags '/x/g
'"
- strict mode: "SyntaxError: Invalid non-latin character in RexExp literal's flags '/x/g
'"
-test/language/white-space/after-regular-_expression_-literal-punctuation-space.js:
- default: "SyntaxError: Invalid non-latin character in RexExp literal's flags '/x/g '"
- strict mode: "SyntaxError: Invalid non-latin character in RexExp literal's flags '/x/g '"
-test/language/white-space/after-regular-_expression_-literal-six-per-em-space.js:
- default: "SyntaxError: Invalid non-latin character in RexExp literal's flags '/x/g '"
- strict mode: "SyntaxError: Invalid non-latin character in RexExp literal's flags '/x/g '"
-test/language/white-space/after-regular-_expression_-literal-thin-space.js:
- default: "SyntaxError: Invalid non-latin character in RexExp literal's flags '/x/g '"
- strict mode: "SyntaxError: Invalid non-latin character in RexExp literal's flags '/x/g '"
-test/language/white-space/after-regular-_expression_-literal-three-per-em-space.js:
- default: "SyntaxError: Invalid non-latin character in RexExp literal's flags '/x/g '"
- strict mode: "SyntaxError: Invalid non-latin character in RexExp literal's flags '/x/g '"
-test/language/white-space/after-regular-_expression_-literal-zwnbsp.js:
- default: "SyntaxError: Invalid non-latin character in RexExp literal's flags '/x/g'"
- strict mode: "SyntaxError: Invalid non-latin character in RexExp literal's flags '/x/g'"
Modified: trunk/Source/_javascript_Core/ChangeLog (280824 => 280825)
--- trunk/Source/_javascript_Core/ChangeLog 2021-08-10 03:33:03 UTC (rev 280824)
+++ trunk/Source/_javascript_Core/ChangeLog 2021-08-10 06:56:17 UTC (rev 280825)
@@ -1,3 +1,17 @@
+2021-08-09 Yusuke Suzuki <[email protected]>
+
+ [JSC] super-Latin1 white space and line terminator after regular _expression_ literal misinterpreted as flags
+ https://bugs.webkit.org/show_bug.cgi?id=227944
+
+ Reviewed by Alexey Shvayka.
+
+ There are non-Latin1 white-spaces and line-terminators, but Lexer::scanRegExp's code did not assume that.
+ As a result, if there is a non-Latin1 white-spaces or line-terminators after RegExp, we raise SyntaxError
+ while this is valid. This patch fixes that.
+
+ * parser/Lexer.cpp:
+ (JSC::Lexer<T>::scanRegExp):
+
2021-08-09 Michael Catanzaro <[email protected]>
Fix yet another -Wreturn-type warning
Modified: trunk/Source/_javascript_Core/parser/Lexer.cpp (280824 => 280825)
--- trunk/Source/_javascript_Core/parser/Lexer.cpp 2021-08-10 03:33:03 UTC (rev 280824)
+++ trunk/Source/_javascript_Core/parser/Lexer.cpp 2021-08-10 06:56:17 UTC (rev 280825)
@@ -2657,7 +2657,7 @@
}
// Normally this would not be a lex error but dealing with surrogate pairs here is annoying and it's going to be an error anyway...
- if (UNLIKELY(!isLatin1(m_current))) {
+ if (UNLIKELY(!isLatin1(m_current) && !isWhiteSpace(m_current) && !isLineTerminator(m_current))) {
m_buffer8.shrink(0);
JSTokenType token = INVALID_IDENTIFIER_UNICODE_ERRORTOK;
fillTokenInfo(tokenRecord, token, m_lineNumber, currentOffset(), currentLineStartOffset(), currentPosition());
@@ -2672,7 +2672,7 @@
tokenData->flags = makeIdentifier(m_buffer8.data(), m_buffer8.size());
m_buffer8.shrink(0);
- // Since RegExp always ends with /, m_atLineStart always becomes false.
+ // Since RegExp always ends with / or flags (IdentifierPart), m_atLineStart always becomes false.
m_atLineStart = false;
JSTokenType token = REGEXP;
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes