[JSC] Add missing exception checks revealed by newly added exception checks, follow...
authorysuzuki@apple.com <ysuzuki@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 19 Mar 2019 03:00:26 +0000 (03:00 +0000)
committerysuzuki@apple.com <ysuzuki@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 19 Mar 2019 03:00:26 +0000 (03:00 +0000)
https://bugs.webkit.org/show_bug.cgi?id=195927

Reviewed by Mark Lam.

r243081 adds more exception checks which are previously missing, and it reveals missing exception checks in the caller.
This patch is a follow-up patch after r243081, adding missing exception checks more to fix debug test failures.

* runtime/RegExpConstructor.cpp:
(JSC::setRegExpConstructorInput):
(JSC::setRegExpConstructorMultiline):
* runtime/RegExpGlobalData.cpp:
(JSC::RegExpGlobalData::getBackref):
(JSC::RegExpGlobalData::getLastParen):

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@243128 268f45cc-cd09-0410-ab3c-d52691b4dbfc

Source/JavaScriptCore/ChangeLog
Source/JavaScriptCore/runtime/RegExpConstructor.cpp
Source/JavaScriptCore/runtime/RegExpGlobalData.cpp

index ee56fd1..3484740 100644 (file)
@@ -1,5 +1,22 @@
 2019-03-18  Yusuke Suzuki  <ysuzuki@apple.com>
 
 2019-03-18  Yusuke Suzuki  <ysuzuki@apple.com>
 
+        [JSC] Add missing exception checks revealed by newly added exception checks, follow-up after r243081
+        https://bugs.webkit.org/show_bug.cgi?id=195927
+
+        Reviewed by Mark Lam.
+
+        r243081 adds more exception checks which are previously missing, and it reveals missing exception checks in the caller.
+        This patch is a follow-up patch after r243081, adding missing exception checks more to fix debug test failures.
+
+        * runtime/RegExpConstructor.cpp:
+        (JSC::setRegExpConstructorInput):
+        (JSC::setRegExpConstructorMultiline):
+        * runtime/RegExpGlobalData.cpp:
+        (JSC::RegExpGlobalData::getBackref):
+        (JSC::RegExpGlobalData::getLastParen):
+
+2019-03-18  Yusuke Suzuki  <ysuzuki@apple.com>
+
         [JSC] Generator should not create JSLexicalEnvironment if it is not necessary
         https://bugs.webkit.org/show_bug.cgi?id=195901
 
         [JSC] Generator should not create JSLexicalEnvironment if it is not necessary
         https://bugs.webkit.org/show_bug.cgi?id=195901
 
index 6da496f..680b6d1 100644 (file)
@@ -150,9 +150,13 @@ EncodedJSValue regExpConstructorRightContext(ExecState* exec, EncodedJSValue thi
 bool setRegExpConstructorInput(ExecState* exec, EncodedJSValue thisValue, EncodedJSValue value)
 {
     VM& vm = exec->vm();
 bool setRegExpConstructorInput(ExecState* exec, EncodedJSValue thisValue, EncodedJSValue value)
 {
     VM& vm = exec->vm();
+    auto scope = DECLARE_THROW_SCOPE(vm);
     if (auto constructor = jsDynamicCast<RegExpConstructor*>(vm, JSValue::decode(thisValue))) {
     if (auto constructor = jsDynamicCast<RegExpConstructor*>(vm, JSValue::decode(thisValue))) {
+        auto* string = JSValue::decode(value).toString(exec);
+        RETURN_IF_EXCEPTION(scope, { });
+        scope.release();
         JSGlobalObject* globalObject = constructor->globalObject(vm);
         JSGlobalObject* globalObject = constructor->globalObject(vm);
-        globalObject->regExpGlobalData().setInput(exec, globalObject, JSValue::decode(value).toString(exec));
+        globalObject->regExpGlobalData().setInput(exec, globalObject, string);
         return true;
     }
     return false;
         return true;
     }
     return false;
@@ -161,9 +165,13 @@ bool setRegExpConstructorInput(ExecState* exec, EncodedJSValue thisValue, Encode
 bool setRegExpConstructorMultiline(ExecState* exec, EncodedJSValue thisValue, EncodedJSValue value)
 {
     VM& vm = exec->vm();
 bool setRegExpConstructorMultiline(ExecState* exec, EncodedJSValue thisValue, EncodedJSValue value)
 {
     VM& vm = exec->vm();
+    auto scope = DECLARE_THROW_SCOPE(vm);
     if (auto constructor = jsDynamicCast<RegExpConstructor*>(vm, JSValue::decode(thisValue))) {
     if (auto constructor = jsDynamicCast<RegExpConstructor*>(vm, JSValue::decode(thisValue))) {
+        bool multiline = JSValue::decode(value).toBoolean(exec);
+        RETURN_IF_EXCEPTION(scope, { });
+        scope.release();
         JSGlobalObject* globalObject = constructor->globalObject(vm);
         JSGlobalObject* globalObject = constructor->globalObject(vm);
-        globalObject->regExpGlobalData().setMultiline(JSValue::decode(value).toBoolean(exec));
+        globalObject->regExpGlobalData().setMultiline(multiline);
         return true;
     }
     return false;
         return true;
     }
     return false;
index 9cbf4a7..d4c2dc5 100644 (file)
@@ -43,6 +43,7 @@ JSValue RegExpGlobalData::getBackref(ExecState* exec, JSGlobalObject* owner, uns
 
     if (i < array->length()) {
         JSValue result = JSValue(array).get(exec, i);
 
     if (i < array->length()) {
         JSValue result = JSValue(array).get(exec, i);
+        RETURN_IF_EXCEPTION(scope, { });
         ASSERT(result.isString() || result.isUndefined());
         if (!result.isUndefined())
             return result;
         ASSERT(result.isString() || result.isUndefined());
         if (!result.isUndefined())
             return result;
@@ -61,6 +62,7 @@ JSValue RegExpGlobalData::getLastParen(ExecState* exec, JSGlobalObject* owner)
     unsigned length = array->length();
     if (length > 1) {
         JSValue result = JSValue(array).get(exec, length - 1);
     unsigned length = array->length();
     if (length > 1) {
         JSValue result = JSValue(array).get(exec, length - 1);
+        RETURN_IF_EXCEPTION(scope, { });
         ASSERT(result.isString() || result.isUndefined());
         if (!result.isUndefined())
             return result;
         ASSERT(result.isString() || result.isUndefined());
         if (!result.isUndefined())
             return result;