Unreviewed, check scope after performing getPropertySlot in JSON.stringify
authorutatane.tea@gmail.com <utatane.tea@gmail.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 19 Jul 2018 17:06:38 +0000 (17:06 +0000)
committerutatane.tea@gmail.com <utatane.tea@gmail.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 19 Jul 2018 17:06:38 +0000 (17:06 +0000)
https://bugs.webkit.org/show_bug.cgi?id=187807

Properly putting EXCEPTION_ASSERT to tell our exception checker mechanism
that we know that exception occurrence and handle it well.

* runtime/JSONObject.cpp:
(JSC::Stringifier::Holder::appendNextProperty):

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

Source/JavaScriptCore/ChangeLog
Source/JavaScriptCore/runtime/JSONObject.cpp

index d18c055..c088dc1 100644 (file)
@@ -1,3 +1,14 @@
+2018-07-19  Yusuke Suzuki  <utatane.tea@gmail.com>
+
+        Unreviewed, check scope after performing getPropertySlot in JSON.stringify
+        https://bugs.webkit.org/show_bug.cgi?id=187807
+
+        Properly putting EXCEPTION_ASSERT to tell our exception checker mechanism
+        that we know that exception occurrence and handle it well.
+
+        * runtime/JSONObject.cpp:
+        (JSC::Stringifier::Holder::appendNextProperty):
+
 2018-07-18  Yusuke Suzuki  <utatane.tea@gmail.com>
 
         [JSC] Reduce size of AST nodes
index e3cf498..40f04c5 100644 (file)
@@ -514,7 +514,9 @@ bool Stringifier::Holder::appendNextProperty(Stringifier& stringifier, StringBui
             value = asArray(m_object)->getIndexQuickly(index);
         else {
             PropertySlot slot(m_object, PropertySlot::InternalMethodType::Get);
-            if (m_object->getPropertySlot(exec, index, slot))
+            bool hasProperty = m_object->getPropertySlot(exec, index, slot);
+            EXCEPTION_ASSERT(!scope.exception() || !hasProperty);
+            if (hasProperty)
                 value = slot.getValue(exec, index);
             else
                 value = jsUndefined();
@@ -533,7 +535,9 @@ bool Stringifier::Holder::appendNextProperty(Stringifier& stringifier, StringBui
         // Get the value.
         PropertySlot slot(m_object, PropertySlot::InternalMethodType::Get);
         Identifier& propertyName = m_propertyNames->propertyNameVector()[index];
-        if (!m_object->getPropertySlot(exec, propertyName, slot))
+        bool hasProperty = m_object->getPropertySlot(exec, propertyName, slot);
+        EXCEPTION_ASSERT(!scope.exception() || !hasProperty);
+        if (!hasProperty)
             return true;
         JSValue value = slot.getValue(exec, propertyName);
         RETURN_IF_EXCEPTION(scope, false);