Title: [213033] releases/WebKitGTK/webkit-2.16
Revision
213033
Author
[email protected]
Date
2017-02-26 23:56:42 -0800 (Sun, 26 Feb 2017)

Log Message

Merge r212710 - ASSERTION FAILED: "!scope.exception()" with Object.isSealed/isFrozen and uninitialized module bindings
https://bugs.webkit.org/show_bug.cgi?id=168605

Reviewed by Saam Barati.

JSTests:

* modules/module-namespace-is-frozen.js: Added.
(from.string_appeared_here.shouldThrow):
(export.b):
* modules/module-namespace-is-sealed.js: Added.
(from.string_appeared_here.shouldThrow):
(export.b):

Source/_javascript_Core:

We should check exception state after calling getOwnPropertyDescriptor() since it can throw errors.

* runtime/ObjectConstructor.cpp:
(JSC::objectConstructorIsSealed):
(JSC::objectConstructorIsFrozen):

Modified Paths

Added Paths

Diff

Modified: releases/WebKitGTK/webkit-2.16/JSTests/ChangeLog (213032 => 213033)


--- releases/WebKitGTK/webkit-2.16/JSTests/ChangeLog	2017-02-27 07:55:01 UTC (rev 213032)
+++ releases/WebKitGTK/webkit-2.16/JSTests/ChangeLog	2017-02-27 07:56:42 UTC (rev 213033)
@@ -1,3 +1,17 @@
+2017-02-21  Yusuke Suzuki  <[email protected]>
+
+        ASSERTION FAILED: "!scope.exception()" with Object.isSealed/isFrozen and uninitialized module bindings
+        https://bugs.webkit.org/show_bug.cgi?id=168605
+
+        Reviewed by Saam Barati.
+
+        * modules/module-namespace-is-frozen.js: Added.
+        (from.string_appeared_here.shouldThrow):
+        (export.b):
+        * modules/module-namespace-is-sealed.js: Added.
+        (from.string_appeared_here.shouldThrow):
+        (export.b):
+
 2017-02-19  Commit Queue  <[email protected]>
 
         Unreviewed, rolling out r212466.

Added: releases/WebKitGTK/webkit-2.16/JSTests/modules/module-namespace-is-frozen.js (0 => 213033)


--- releases/WebKitGTK/webkit-2.16/JSTests/modules/module-namespace-is-frozen.js	                        (rev 0)
+++ releases/WebKitGTK/webkit-2.16/JSTests/modules/module-namespace-is-frozen.js	2017-02-27 07:56:42 UTC (rev 213033)
@@ -0,0 +1,9 @@
+import * as ns from "./module-namespace-is-frozen.js"
+import {shouldThrow} from "./resources/assert.js"
+
+shouldThrow(() => {
+    Object.isFrozen(ns);
+}, `ReferenceError: Cannot access uninitialized variable.`);
+
+export let a;
+export function b () { }

Added: releases/WebKitGTK/webkit-2.16/JSTests/modules/module-namespace-is-sealed.js (0 => 213033)


--- releases/WebKitGTK/webkit-2.16/JSTests/modules/module-namespace-is-sealed.js	                        (rev 0)
+++ releases/WebKitGTK/webkit-2.16/JSTests/modules/module-namespace-is-sealed.js	2017-02-27 07:56:42 UTC (rev 213033)
@@ -0,0 +1,9 @@
+import * as ns from "./module-namespace-is-sealed.js"
+import {shouldThrow} from "./resources/assert.js"
+
+shouldThrow(() => {
+    Object.isSealed(ns);
+}, `ReferenceError: Cannot access uninitialized variable.`);
+
+export let a;
+export function b () { }

Modified: releases/WebKitGTK/webkit-2.16/Source/_javascript_Core/ChangeLog (213032 => 213033)


--- releases/WebKitGTK/webkit-2.16/Source/_javascript_Core/ChangeLog	2017-02-27 07:55:01 UTC (rev 213032)
+++ releases/WebKitGTK/webkit-2.16/Source/_javascript_Core/ChangeLog	2017-02-27 07:56:42 UTC (rev 213033)
@@ -1,3 +1,16 @@
+2017-02-21  Yusuke Suzuki  <[email protected]>
+
+        ASSERTION FAILED: "!scope.exception()" with Object.isSealed/isFrozen and uninitialized module bindings
+        https://bugs.webkit.org/show_bug.cgi?id=168605
+
+        Reviewed by Saam Barati.
+
+        We should check exception state after calling getOwnPropertyDescriptor() since it can throw errors.
+
+        * runtime/ObjectConstructor.cpp:
+        (JSC::objectConstructorIsSealed):
+        (JSC::objectConstructorIsFrozen):
+
 2017-02-20  Mark Lam  <[email protected]>
 
         [Re-landing] CachedCall should let GC know to keep its arguments alive.

Modified: releases/WebKitGTK/webkit-2.16/Source/_javascript_Core/runtime/ObjectConstructor.cpp (213032 => 213033)


--- releases/WebKitGTK/webkit-2.16/Source/_javascript_Core/runtime/ObjectConstructor.cpp	2017-02-27 07:55:01 UTC (rev 213032)
+++ releases/WebKitGTK/webkit-2.16/Source/_javascript_Core/runtime/ObjectConstructor.cpp	2017-02-27 07:56:42 UTC (rev 213033)
@@ -631,7 +631,7 @@
     // 2. For each named own property name P of O,
     PropertyNameArray properties(exec, PropertyNameMode::StringsAndSymbols);
     object->methodTable(vm)->getOwnPropertyNames(object, exec, properties, EnumerationMode(DontEnumPropertiesMode::Include));
-    RETURN_IF_EXCEPTION(scope, encodedJSValue());
+    RETURN_IF_EXCEPTION(scope, { });
     PropertyNameArray::const_iterator end = properties.end();
     for (PropertyNameArray::const_iterator iter = properties.begin(); iter != end; ++iter) {
         Identifier propertyName = *iter;
@@ -639,7 +639,9 @@
             continue;
         // a. Let desc be the result of calling the [[GetOwnProperty]] internal method of O with P.
         PropertyDescriptor desc;
-        if (!object->getOwnPropertyDescriptor(exec, propertyName, desc))
+        bool didGetDescriptor = object->getOwnPropertyDescriptor(exec, propertyName, desc);
+        RETURN_IF_EXCEPTION(scope, { });
+        if (!didGetDescriptor)
             continue;
         // b. If desc.[[Configurable]] is true, then return false.
         if (desc.configurable())
@@ -649,7 +651,7 @@
     // 3. If the [[Extensible]] internal property of O is false, then return true.
     // 4. Otherwise, return false.
     bool isExtensible = object->isExtensible(exec);
-    RETURN_IF_EXCEPTION(scope, encodedJSValue());
+    RETURN_IF_EXCEPTION(scope, { });
     return JSValue::encode(jsBoolean(!isExtensible));
 }
 
@@ -670,7 +672,7 @@
     // 2. For each named own property name P of O,
     PropertyNameArray properties(exec, PropertyNameMode::StringsAndSymbols);
     object->methodTable(vm)->getOwnPropertyNames(object, exec, properties, EnumerationMode(DontEnumPropertiesMode::Include));
-    RETURN_IF_EXCEPTION(scope, encodedJSValue());
+    RETURN_IF_EXCEPTION(scope, { });
     PropertyNameArray::const_iterator end = properties.end();
     for (PropertyNameArray::const_iterator iter = properties.begin(); iter != end; ++iter) {
         Identifier propertyName = *iter;
@@ -678,7 +680,9 @@
             continue;
         // a. Let desc be the result of calling the [[GetOwnProperty]] internal method of O with P.
         PropertyDescriptor desc;
-        if (!object->getOwnPropertyDescriptor(exec, propertyName, desc))
+        bool didGetDescriptor = object->getOwnPropertyDescriptor(exec, propertyName, desc);
+        RETURN_IF_EXCEPTION(scope, { });
+        if (!didGetDescriptor)
             continue;
         // b. If IsDataDescriptor(desc) is true then
         // i. If desc.[[Writable]] is true, return false. c. If desc.[[Configurable]] is true, then return false.
@@ -689,7 +693,7 @@
     // 3. If the [[Extensible]] internal property of O is false, then return true.
     // 4. Otherwise, return false.
     bool isExtensible = object->isExtensible(exec);
-    RETURN_IF_EXCEPTION(scope, encodedJSValue());
+    RETURN_IF_EXCEPTION(scope, { });
     return JSValue::encode(jsBoolean(!isExtensible));
 }
 
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to