Changeset 107647 in webkit for trunk/Source/JavaScriptCore/yarr


Ignore:
Timestamp:
Feb 13, 2012, 5:10:09 PM (13 years ago)
Author:
[email protected]
Message:

Executing out of bounds in JSC::Yarr::YarrCodeBlock::execute / JSC::RegExp::match
https://bugs.webkit.org/show_bug.cgi?id=76315

Reviewed by Gavin Barraclough.

Perform a 3 byte compare using two comparisons, rather than trying to perform the
operation with a four byte load.

  • yarr/YarrJIT.cpp:

(JSC::Yarr::YarrGenerator::generatePatternCharacterOnce):

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/JavaScriptCore/yarr/YarrJIT.cpp

    r107400 r107647  
    733733            }
    734734            case 3: {
    735                 BaseIndex address(input, index, TimesOne, (startTermPosition - m_checked) * sizeof(LChar));
    736                 load32WithUnalignedHalfWords(address, character);
    737                 and32(Imm32(0xffffff), character);
    738                 break;
     735                BaseIndex highAddress(input, index, TimesOne, (startTermPosition - m_checked) * sizeof(LChar));
     736                load16(highAddress, character);
     737                if (ignoreCaseMask)
     738                    or32(Imm32(ignoreCaseMask), character);
     739                op.m_jumps.append(branch32(NotEqual, character, Imm32((allCharacters & 0xffff) | ignoreCaseMask)));
     740                op.m_jumps.append(jumpIfCharNotEquals(allCharacters >> 16, startTermPosition + 2 - m_checked, character));
     741                return;
    739742            }
    740743            case 4: {
Note: See TracChangeset for help on using the changeset viewer.