Changeset 280825 in webkit


Ignore:
Timestamp:
Aug 9, 2021 11:56:17 PM (11 months ago)
Author:
ysuzuki@apple.com
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/JavaScriptCore:

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):

Location:
trunk
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/JSTests/ChangeLog

    r280765 r280825  
     12021-08-09  Yusuke Suzuki  <ysuzuki@apple.com>
     2
     3        [JSC] super-Latin1 white space and line terminator after regular expression literal misinterpreted as flags
     4        https://bugs.webkit.org/show_bug.cgi?id=227944
     5
     6        Reviewed by Alexey Shvayka.
     7
     8        * test262/expectations.yaml:
     9
    1102021-08-08  Yusuke Suzuki  <ysuzuki@apple.com>
    211
  • trunk/JSTests/test262/expectations.yaml

    r280765 r280825  
    19611961  default: 'Test262Error: Expected SameValue(«3», «42») to be true'
    19621962  strict mode: 'Test262Error: Expected SameValue(«3», «42») to be true'
    1963 test/language/white-space/after-regular-expression-literal-em-quad.js:
    1964   default: "SyntaxError: Invalid non-latin character in RexExp literal's flags '/x/g '"
    1965   strict mode: "SyntaxError: Invalid non-latin character in RexExp literal's flags '/x/g '"
    1966 test/language/white-space/after-regular-expression-literal-em-space.js:
    1967   default: "SyntaxError: Invalid non-latin character in RexExp literal's flags '/x/g '"
    1968   strict mode: "SyntaxError: Invalid non-latin character in RexExp literal's flags '/x/g '"
    1969 test/language/white-space/after-regular-expression-literal-en-quad.js:
    1970   default: "SyntaxError: Invalid non-latin character in RexExp literal's flags '/x/g '"
    1971   strict mode: "SyntaxError: Invalid non-latin character in RexExp literal's flags '/x/g '"
    1972 test/language/white-space/after-regular-expression-literal-en-space.js:
    1973   default: "SyntaxError: Invalid non-latin character in RexExp literal's flags '/x/g '"
    1974   strict mode: "SyntaxError: Invalid non-latin character in RexExp literal's flags '/x/g '"
    1975 test/language/white-space/after-regular-expression-literal-figure-space.js:
    1976   default: "SyntaxError: Invalid non-latin character in RexExp literal's flags '/x/g '"
    1977   strict mode: "SyntaxError: Invalid non-latin character in RexExp literal's flags '/x/g '"
    1978 test/language/white-space/after-regular-expression-literal-four-per-em-space.js:
    1979   default: "SyntaxError: Invalid non-latin character in RexExp literal's flags '/x/g '"
    1980   strict mode: "SyntaxError: Invalid non-latin character in RexExp literal's flags '/x/g '"
    1981 test/language/white-space/after-regular-expression-literal-hair-space.js:
    1982   default: "SyntaxError: Invalid non-latin character in RexExp literal's flags '/x/g '"
    1983   strict mode: "SyntaxError: Invalid non-latin character in RexExp literal's flags '/x/g '"
    1984 test/language/white-space/after-regular-expression-literal-ideographic-space.js:
    1985   default: "SyntaxError: Invalid non-latin character in RexExp literal's flags '/x/g '"
    1986   strict mode: "SyntaxError: Invalid non-latin character in RexExp literal's flags '/x/g '"
    1987 test/language/white-space/after-regular-expression-literal-line-separator.js:
    1988   default: "SyntaxError: Invalid non-latin character in RexExp literal's flags '/x/g
    1989 '"
    1990   strict mode: "SyntaxError: Invalid non-latin character in RexExp literal's flags '/x/g
    1991 '"
    1992 test/language/white-space/after-regular-expression-literal-medium-mathematical-space.js:
    1993   default: "SyntaxError: Invalid non-latin character in RexExp literal's flags '/x/g '"
    1994   strict mode: "SyntaxError: Invalid non-latin character in RexExp literal's flags '/x/g '"
    1995 test/language/white-space/after-regular-expression-literal-nnbsp.js:
    1996   default: "SyntaxError: Invalid non-latin character in RexExp literal's flags '/x/g '"
    1997   strict mode: "SyntaxError: Invalid non-latin character in RexExp literal's flags '/x/g '"
    1998 test/language/white-space/after-regular-expression-literal-ogham-space.js:
    1999   default: "SyntaxError: Invalid non-latin character in RexExp literal's flags '/x/g '"
    2000   strict mode: "SyntaxError: Invalid non-latin character in RexExp literal's flags '/x/g '"
    2001 test/language/white-space/after-regular-expression-literal-paragraph-separator.js:
    2002   default: "SyntaxError: Invalid non-latin character in RexExp literal's flags '/x/g
    2003 '"
    2004   strict mode: "SyntaxError: Invalid non-latin character in RexExp literal's flags '/x/g
    2005 '"
    2006 test/language/white-space/after-regular-expression-literal-punctuation-space.js:
    2007   default: "SyntaxError: Invalid non-latin character in RexExp literal's flags '/x/g '"
    2008   strict mode: "SyntaxError: Invalid non-latin character in RexExp literal's flags '/x/g '"
    2009 test/language/white-space/after-regular-expression-literal-six-per-em-space.js:
    2010   default: "SyntaxError: Invalid non-latin character in RexExp literal's flags '/x/g '"
    2011   strict mode: "SyntaxError: Invalid non-latin character in RexExp literal's flags '/x/g '"
    2012 test/language/white-space/after-regular-expression-literal-thin-space.js:
    2013   default: "SyntaxError: Invalid non-latin character in RexExp literal's flags '/x/g '"
    2014   strict mode: "SyntaxError: Invalid non-latin character in RexExp literal's flags '/x/g '"
    2015 test/language/white-space/after-regular-expression-literal-three-per-em-space.js:
    2016   default: "SyntaxError: Invalid non-latin character in RexExp literal's flags '/x/g '"
    2017   strict mode: "SyntaxError: Invalid non-latin character in RexExp literal's flags '/x/g '"
    2018 test/language/white-space/after-regular-expression-literal-zwnbsp.js:
    2019   default: "SyntaxError: Invalid non-latin character in RexExp literal's flags '/x/g'"
    2020   strict mode: "SyntaxError: Invalid non-latin character in RexExp literal's flags '/x/g'"
  • trunk/Source/JavaScriptCore/ChangeLog

    r280809 r280825  
     12021-08-09  Yusuke Suzuki  <ysuzuki@apple.com>
     2
     3        [JSC] super-Latin1 white space and line terminator after regular expression literal misinterpreted as flags
     4        https://bugs.webkit.org/show_bug.cgi?id=227944
     5
     6        Reviewed by Alexey Shvayka.
     7
     8        There are non-Latin1 white-spaces and line-terminators, but Lexer::scanRegExp's code did not assume that.
     9        As a result, if there is a non-Latin1 white-spaces or line-terminators after RegExp, we raise SyntaxError
     10        while this is valid. This patch fixes that.
     11
     12        * parser/Lexer.cpp:
     13        (JSC::Lexer<T>::scanRegExp):
     14
    1152021-08-09  Michael Catanzaro  <mcatanzaro@gnome.org>
    216
  • trunk/Source/JavaScriptCore/parser/Lexer.cpp

    r278253 r280825  
    26582658
    26592659    // 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...
    2660     if (UNLIKELY(!isLatin1(m_current))) {
     2660    if (UNLIKELY(!isLatin1(m_current) && !isWhiteSpace(m_current) && !isLineTerminator(m_current))) {
    26612661        m_buffer8.shrink(0);
    26622662        JSTokenType token = INVALID_IDENTIFIER_UNICODE_ERRORTOK;
     
    26732673    m_buffer8.shrink(0);
    26742674
    2675     // Since RegExp always ends with /, m_atLineStart always becomes false.
     2675    // Since RegExp always ends with / or flags (IdentifierPart), m_atLineStart always becomes false.
    26762676    m_atLineStart = false;
    26772677
Note: See TracChangeset for help on using the changeset viewer.