Ignore:
Timestamp:
Dec 12, 2006, 12:09:58 PM (18 years ago)
Author:
ap
Message:

Reviewed by Geoff. Based on a patch by Maks Orlovich.

http://bugs.webkit.org/show_bug.cgi?id=6257
Throw errors on invalid expressions (KJS merge)

JavaScriptCore:

  • kjs/regexp.cpp: (KJS::RegExp::RegExp): (KJS::RegExp::~RegExp): (KJS::RegExp::match):
  • kjs/regexp.h: (KJS::RegExp::flags): (KJS::RegExp::isValid): (KJS::RegExp::errorMessage): (KJS::RegExp::subPatterns): Remember and report RegExp construction failures. Renamed data members not to start with underscores.
  • kjs/regexp_object.cpp: (RegExpObjectImp::construct): Raise an exception if RegExp construction fails. (RegExpObjectImp::callAsFunction): Removed an obsolete comment.
  • tests/mozilla/ecma_3/RegExp/regress-119909.js: Reduced the number of nested parentheses to a value supported by PCRE.

LayoutTests:

  • fast/js/kde/RegExp-expected.txt: One more test passes.
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/JavaScriptCore/kjs/regexp_object.cpp

    r15846 r18182  
    383383  bool ignoreCase = (flags.find("i") >= 0);
    384384  bool multiline = (flags.find("m") >= 0);
    385   // TODO: throw a syntax error on invalid flags
    386385
    387386  dat->putDirect("global", jsBoolean(global), DontDelete | ReadOnly | DontEnum);
     
    399398  if (multiline)
    400399      reflags |= RegExp::Multiline;
    401   dat->setRegExp(new RegExp(p, reflags));
     400  RegExp* re = new RegExp(p, reflags);
     401  if (!re->isValid()) {
     402    delete re;
     403    return throwError(exec, SyntaxError, UString("Invalid regular expression: ").append(re->errorMessage()));
     404  }
     405  dat->setRegExp(re);
    402406
    403407  return dat;
     
    407411JSValue *RegExpObjectImp::callAsFunction(ExecState *exec, JSObject * /*thisObj*/, const List &args)
    408412{
    409   // TODO: handle RegExp argument case (15.10.3.1)
    410 
    411413  return construct(exec, args);
    412414}
Note: See TracChangeset for help on using the changeset viewer.