Changeset 15522 in webkit for trunk/JavaScriptCore


Ignore:
Timestamp:
Jul 19, 2006, 12:06:13 AM (19 years ago)
Author:
mjs
Message:

JavaScriptCore:

Reviewed by Adele Peterson.


<rdar://problem/4589530> REGRESSION: null character in JS string causes parse error (works in Tiger and in other browsers)

  • kjs/lexer.cpp: (Lexer::shift): (Lexer::lex): (Lexer::record16): (Lexer::scanRegExp):
  • kjs/lexer.h:

LayoutTests:

Reviewed by Adele Peterson.


Test case for:


<rdar://problem/4620646> REGRESSION(10.4.7-10.5): can't type into editing region when creating or editing a blogger.com post

  • fast/js/null-char-in-string-expected.txt: Added.
  • fast/js/null-char-in-string.html: Added.
  • fast/js/resources/null-char-in-string.js: Added.
Location:
trunk/JavaScriptCore
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/JavaScriptCore/ChangeLog

    r15521 r15522  
     12006-07-18  Maciej Stachowiak  <[email protected]>
     2
     3        Reviewed by Adele Peterson.
     4       
     5        <rdar://problem/4589530> REGRESSION: null character in JS string causes parse error (works in Tiger and in other browsers)
     6
     7        * kjs/lexer.cpp:
     8        (Lexer::shift):
     9        (Lexer::lex):
     10        (Lexer::record16):
     11        (Lexer::scanRegExp):
     12        * kjs/lexer.h:
     13
    1142006-07-18  Tim Omernick  <[email protected]>
    215
  • trunk/JavaScriptCore/kjs/lexer.cpp

    r14821 r15522  
    126126    do {
    127127      if (pos >= length) {
    128         next3 = 0;
     128        next3 = -1;
    129129        break;
    130130      }
     
    189189        shift(1);
    190190        state = InMultiLineComment;
    191       } else if (current == 0) {
     191      } else if (current == -1) {
    192192        if (!terminator && !delimited) {
    193193          // automatic semicolon insertion if program incomplete
     
    246246        shift(1);
    247247        setDone(String);
    248       } else if (current == 0 || isLineTerminator()) {
     248      } else if (isLineTerminator() || current == -1) {
    249249        setDone(Bad);
    250250      } else if (current == '\\') {
     
    321321        } else
    322322          state = Start;
    323       } else if (current == 0) {
     323      } else if (current == -1) {
    324324        setDone(Eof);
    325325      }
    326326      break;
    327327    case InMultiLineComment:
    328       if (current == 0) {
     328      if (current == -1) {
    329329        setDone(Bad);
    330330      } else if (isLineTerminator()) {
     
    805805}
    806806
     807void Lexer::record16(int c)
     808{
     809  ASSERT(c >= 0);
     810  ASSERT(c <= USHRT_MAX);
     811  record16(UChar(static_cast<unsigned short>(c)));
     812}
     813
    807814void Lexer::record16(KJS::UChar c)
    808815{
     
    826833
    827834  while (1) {
    828     if (isLineTerminator() || current == 0)
     835    if (isLineTerminator() || current == -1)
    829836      return false;
    830837    else if (current != '/' || lastWasEscape == true || inBrackets == true)
  • trunk/JavaScriptCore/kjs/lexer.h

    r12317 r15522  
    134134
    135135    void record8(unsigned short c);
     136    void record16(int c);
    136137    void record16(UChar c);
    137138
     
    147148    bool error;
    148149
    149     // current and following unicode characters
    150     unsigned short current, next1, next2, next3;
     150    // current and following unicode characters (int to allow for -1 for end-of-file marker)
     151    int current, next1, next2, next3;
    151152
    152153    UString **strings;
Note: See TracChangeset for help on using the changeset viewer.