• bmeurer@chromium.org's avatar
    Fix crash due RegExpAtom method called on RegExpCharacterClass object. · 17ec357a
    bmeurer@chromium.org authored
    In the RegExpUnparser::VisitText(RegExpText* that, void* data) function always RegExpUnparser::VisitAtom function called via that->elements()->at(i).data.u_atom->Accept(this, data); even if the type of the object is RegExpCharacterClass.
    
    The problem shows using g++ 4.7(.2, .3) since r16232, since GCC optimizes virtual method calls to direct calls based on __final/final hints. Tested on MIPS and x64:
    Program received signal SIGSEGV, Segmentation fault.
    0x0000000000588928 in v8::internal::RegExpUnparser::VisitAtom(v8::internal::RegExpAtom*, void*) ()
    
    This cleans up the TextElement class to avoid the unsafe+unchecked union access, that caused the crash.
    
    TEST=cctest/test-regexp/ParserRegression
    R=jkummerow@chromium.org
    
    Review URL: https://codereview.chromium.org/22815033
    
    git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@16289 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
    17ec357a
jsregexp.cc 214 KB