Changeset 76275 in webkit


Ignore:
Timestamp:
Jan 20, 2011 1:31:21 PM (13 years ago)
Author:
msaboff@apple.com
Message:

2011-01-20 Michael Saboff <msaboff@apple.com>

Reviewed by Oliver Hunt.

<rdar://problem/8890203> [RegexFuzz] Crash in generated code (52773)
https://bugs.webkit.org/show_bug.cgi?id=52773

Fixed case where an existing DataLabelPtr is overwritten. The
replacing DataLabelPtr is now resolved immediately in
linkDataLabelToBacktrackIfExists(). Cleanup - eliminated bool
return value for the routine as it was never used.

  • yarr/YarrJIT.cpp: (JSC::Yarr::YarrGenerator::TermGenerationState::linkDataLabelToBacktrackIfExists):

2011-01-20 Michael Saboff <msaboff@apple.com>

Reviewed by Oliver Hunt.

<rdar://problem/8890203> [RegexFuzz] Crash in generated code (52773)
https://bugs.webkit.org/show_bug.cgi?id=52773

New test to validate fix.

  • fast/regex/parentheses-expected.txt:
  • fast/regex/script-tests/parentheses.js:
Location:
trunk
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r76274 r76275  
     12011-01-20  Michael Saboff  <msaboff@apple.com>
     2
     3        Reviewed by Oliver Hunt.
     4
     5        <rdar://problem/8890203> [RegexFuzz] Crash in generated code (52773)
     6        https://bugs.webkit.org/show_bug.cgi?id=52773
     7
     8        New test to validate fix.
     9
     10        * fast/regex/parentheses-expected.txt:
     11        * fast/regex/script-tests/parentheses.js:
     12
    1132011-01-20  Dirk Schulze  <krit@webkit.org>
    214
  • trunk/LayoutTests/fast/regex/parentheses-expected.txt

    r76133 r76275  
    7575PASS regexp43.exec('SSS') is ['']
    7676PASS regexp44.exec('SSS') is ['',undefined]
     77PASS regexp45.exec('vt') is null
    7778PASS 'Hi Bob'.match(/(Rob)|(Bob)|(Robert)|(Bobby)/) is ['Bob',undefined,'Bob',undefined,undefined]
    7879PASS successfullyParsed is true
  • trunk/LayoutTests/fast/regex/script-tests/parentheses.js

    r76133 r76275  
    200200shouldBe("regexp44.exec('SSS')", "['',undefined]");
    201201
     202var regexp45 = /((?!(?:|)v{2,}|))/;
     203shouldBeNull("regexp45.exec('vt')");
     204
    202205shouldBe("'Hi Bob'.match(/(Rob)|(Bob)|(Robert)|(Bobby)/)", "['Bob',undefined,'Bob',undefined,undefined]");
    203206
  • trunk/Source/JavaScriptCore/ChangeLog

    r76263 r76275  
     12011-01-20  Michael Saboff  <msaboff@apple.com>
     2
     3        Reviewed by Oliver Hunt.
     4
     5        <rdar://problem/8890203> [RegexFuzz] Crash in generated code (52773)
     6        https://bugs.webkit.org/show_bug.cgi?id=52773
     7
     8        Fixed case where an existing DataLabelPtr is overwritten.  The
     9        replacing DataLabelPtr is now resolved immediately in
     10        linkDataLabelToBacktrackIfExists().  Cleanup - eliminated bool
     11        return value for the routine as it was never used.
     12
     13        * yarr/YarrJIT.cpp:
     14        (JSC::Yarr::YarrGenerator::TermGenerationState::linkDataLabelToBacktrackIfExists):
     15
    1162011-01-20  Andras Becsi  <abecsi@webkit.org>
    217
  • trunk/Source/JavaScriptCore/yarr/YarrJIT.cpp

    r76133 r76275  
    640640                *m_subDataLabelPtr = dp;
    641641                m_subDataLabelPtr = 0;
    642             } else
     642            } else {
     643                ASSERT(!hasDataLabel());
    643644                m_dataLabelPtr = dp;
     645            }
    644646        }
    645647
     
    931933        }
    932934
    933         bool linkDataLabelToBacktrackIfExists(YarrGenerator* generator, DataLabelPtr dataLabel)
     935        void linkDataLabelToBacktrackIfExists(YarrGenerator* generator, DataLabelPtr dataLabel)
    934936        {
    935937            // If we have a stack offset backtrack destination, use it directly
     
    938940                m_backtrack.clearSubDataLabelPtr();
    939941            } else {
    940                 // Otherwise set the data label (which may be linked)
    941                 setBacktrackDataLabel(dataLabel);
    942 
    943                 if ((m_backtrack.isLabel()) && (m_backtrack.hasDataLabel())) {
    944                     generator->m_expressionState.m_backtrackRecords.append(AlternativeBacktrackRecord(m_backtrack.getDataLabel(), m_backtrack.getLabel()));
    945                     m_backtrack.clearDataLabel();
    946                     return true;
    947                 }
    948             }
    949 
    950             return false;
     942                // If we have a backtrack label, connect the datalabel to it directly.
     943                if (m_backtrack.isLabel())
     944                    generator->m_expressionState.m_backtrackRecords.append(AlternativeBacktrackRecord(dataLabel, m_backtrack.getLabel()));
     945                else
     946                    setBacktrackDataLabel(dataLabel);
     947            }
    951948        }
    952949
Note: See TracChangeset for help on using the changeset viewer.