Changeset 15522 in webkit for trunk/JavaScriptCore/kjs/lexer.cpp


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.
File:
1 edited

Legend:

Unmodified
Added
Removed
  • 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)
Note: See TracChangeset for help on using the changeset viewer.