Changeset 61450 in webkit for trunk/JavaScriptCore/parser


Ignore:
Timestamp:
Jun 18, 2010, 4:09:23 PM (15 years ago)
Author:
[email protected]
Message:

2010-06-18 Oliver Hunt <[email protected]>

Reviewed by Geoffrey Garen.

Incorrect handling of multiple BOMs scattered through a file.
https://bugs.webkit.org/show_bug.cgi?id=40865

When determining the offset of open and close braces in a source
with BOMs we were finishing our count early as we failed to account
for BOMs prior to the open/close brace positions effecting those
positions.

  • parser/Lexer.cpp: (JSC::Lexer::sourceCode):

2010-06-18 Oliver Hunt <[email protected]>

Reviewed by Geoffrey Garen.

Incorrect handling of multiple BOMs scattered through a file.
https://bugs.webkit.org/show_bug.cgi?id=40865

Put a few more BOMs into this testcase so that it hits the other cases
that were missed before.

  • fast/js/resources/bom-in-file-retains-correct-offset.js: (g.f): (g):
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/JavaScriptCore/parser/Lexer.cpp

    r59061 r61450  
    10251025
    10261026    const UChar* data = m_source->provider()->data();
    1027 
     1027   
    10281028    ASSERT(openBrace < closeBrace);
    1029 
    1030     int numBOMsBeforeOpenBrace = 0;
    1031     int numBOMsBetweenBraces = 0;
    1032 
    10331029    int i;
    1034     for (i = m_source->startOffset(); i < openBrace; ++i)
    1035         numBOMsBeforeOpenBrace += data[i] == byteOrderMark;
    1036     for (; i < closeBrace; ++i)
    1037         numBOMsBetweenBraces += data[i] == byteOrderMark;
    1038 
    1039     return SourceCode(m_source->provider(), openBrace + numBOMsBeforeOpenBrace,
    1040         closeBrace + numBOMsBeforeOpenBrace + numBOMsBetweenBraces + 1, firstLine);
     1030    for (i = m_source->startOffset(); i < openBrace; ++i) {
     1031        if (data[i] == byteOrderMark) {
     1032            openBrace++;
     1033            closeBrace++;
     1034        }
     1035    }
     1036    for (; i < closeBrace; ++i) {
     1037        if (data[i] == byteOrderMark)
     1038            closeBrace++;
     1039    }
     1040
     1041    ASSERT(openBrace < closeBrace);
     1042
     1043    return SourceCode(m_source->provider(), openBrace, closeBrace + 1, firstLine);
    10411044}
    10421045
Note: See TracChangeset for help on using the changeset viewer.