Ignore:
Timestamp:
May 16, 2014, 3:09:51 PM (11 years ago)
Author:
[email protected]
Message:

Crash in JSC::Yarr::YarrGenerator<(JSC::Yarr::YarrJITCompileMode)0>::generatePatternCharacterFixed() due to WTF::CrashOnOverflow::overflowed + 9
https://bugs.webkit.org/show_bug.cgi?id=133009

Reviewed by Oliver Hunt.

If we determine that any alternative requires a minumum match size greater than
INT_MAX, we handle the match in the interpreter.

Check to see if the pattern has unsigned lengths before invoking YARR JIT.

  • runtime/RegExp.cpp:

(JSC::RegExp::compile):
(JSC::RegExp::compileMatchOnly):

  • tests/stress/large-regexp.js: New test added.

Set m_containsUnsignedLengthPattern flag if any alternative's minimum length
doesn't fit in an int.

  • yarr/YarrPattern.cpp:

(JSC::Yarr::YarrPatternConstructor::setupDisjunctionOffsets):

Clear new m_containsUnsignedLengthPattern flag.

  • yarr/YarrPattern.cpp:

(JSC::Yarr::YarrPattern::YarrPattern):

  • yarr/YarrPattern.h:

(JSC::Yarr::YarrPattern::reset):
(JSC::Yarr::YarrPattern::containsUnsignedLengthPattern):

File:
1 edited

Legend:

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

    r157653 r168983  
    667667            maximumCallFrameSize = std::max(maximumCallFrameSize, currentAlternativeCallFrameSize);
    668668            hasFixedSize &= alternative->m_hasFixedSize;
     669            if (alternative->m_minimumSize > INT_MAX)
     670                m_pattern.m_containsUnsignedLengthPattern = true;
    669671        }
    670672       
     
    865867    , m_containsBackreferences(false)
    866868    , m_containsBOL(false)
     869    , m_containsUnsignedLengthPattern(false)
    867870    , m_numSubpatterns(0)
    868871    , m_maxBackReference(0)
Note: See TracChangeset for help on using the changeset viewer.