Title: [208782] trunk
Revision
208782
Author
[email protected]
Date
2016-11-15 21:05:38 -0800 (Tue, 15 Nov 2016)

Log Message

Make JSC test functions more robust.
https://bugs.webkit.org/show_bug.cgi?id=164807

Reviewed by Keith Miller.

JSTests:

* stress/jsc-test-functions-should-be-more-robust.js: Added.

Source/_javascript_Core:

* jsc.cpp:
(functionGetHiddenValue):
(functionSetHiddenValue):

Modified Paths

Added Paths

Diff

Modified: trunk/JSTests/ChangeLog (208781 => 208782)


--- trunk/JSTests/ChangeLog	2016-11-16 04:47:20 UTC (rev 208781)
+++ trunk/JSTests/ChangeLog	2016-11-16 05:05:38 UTC (rev 208782)
@@ -1,3 +1,12 @@
+2016-11-15  Mark Lam  <[email protected]>
+
+        Make JSC test functions more robust.
+        https://bugs.webkit.org/show_bug.cgi?id=164807
+
+        Reviewed by Keith Miller.
+
+        * stress/jsc-test-functions-should-be-more-robust.js: Added.
+
 2016-11-15  Keith Miller  <[email protected]>
 
         B3 should support UDiv/UMod

Added: trunk/JSTests/stress/jsc-test-functions-should-be-more-robust.js (0 => 208782)


--- trunk/JSTests/stress/jsc-test-functions-should-be-more-robust.js	                        (rev 0)
+++ trunk/JSTests/stress/jsc-test-functions-should-be-more-robust.js	2016-11-16 05:05:38 UTC (rev 208782)
@@ -0,0 +1,25 @@
+//@ runFTLNoCJIT
+// This test passes if it does not crash or trigger any assertion failures.
+
+function shouldEqual(actual, expected) {
+    if (actual != expected) {
+        throw "ERROR: expect " + expected + ", actual " + actual;
+    }
+}
+
+function test(testAction, expectedException) {
+    var exception;
+    try {
+        testAction();
+    } catch (e) {
+        exception = e;
+    }
+    shouldEqual(exception, expectedException);
+}
+
+test(() => { getHiddenValue(); }, "TypeError: Invalid use of getHiddenValue test function");
+test(() => { getHiddenValue({}); }, "TypeError: Invalid use of getHiddenValue test function");
+
+test(() => { setHiddenValue(); }, "TypeError: Invalid use of setHiddenValue test function");
+test(() => { setHiddenValue({}); }, "TypeError: Invalid use of setHiddenValue test function");
+

Modified: trunk/Source/_javascript_Core/ChangeLog (208781 => 208782)


--- trunk/Source/_javascript_Core/ChangeLog	2016-11-16 04:47:20 UTC (rev 208781)
+++ trunk/Source/_javascript_Core/ChangeLog	2016-11-16 05:05:38 UTC (rev 208782)
@@ -1,3 +1,14 @@
+2016-11-15  Mark Lam  <[email protected]>
+
+        Make JSC test functions more robust.
+        https://bugs.webkit.org/show_bug.cgi?id=164807
+
+        Reviewed by Keith Miller.
+
+        * jsc.cpp:
+        (functionGetHiddenValue):
+        (functionSetHiddenValue):
+
 2016-11-15  Keith Miller  <[email protected]>
 
         B3 should support UDiv/UMod

Modified: trunk/Source/_javascript_Core/jsc.cpp (208781 => 208782)


--- trunk/Source/_javascript_Core/jsc.cpp	2016-11-16 04:47:20 UTC (rev 208781)
+++ trunk/Source/_javascript_Core/jsc.cpp	2016-11-16 05:05:38 UTC (rev 208782)
@@ -1680,15 +1680,29 @@
 
 EncodedJSValue JSC_HOST_CALL functionGetHiddenValue(ExecState* exec)
 {
-    JSLockHolder lock(exec);
-    SimpleObject* simpleObject = jsCast<SimpleObject*>(exec->argument(0).asCell());
+    VM& vm = exec->vm();
+    JSLockHolder lock(vm);
+    auto scope = DECLARE_THROW_SCOPE(vm);
+
+    SimpleObject* simpleObject = jsDynamicCast<SimpleObject*>(exec->argument(0));
+    if (UNLIKELY(!simpleObject)) {
+        throwTypeError(exec, scope, ASCIILiteral("Invalid use of getHiddenValue test function"));
+        return encodedJSValue();
+    }
     return JSValue::encode(simpleObject->hiddenValue());
 }
 
 EncodedJSValue JSC_HOST_CALL functionSetHiddenValue(ExecState* exec)
 {
-    JSLockHolder lock(exec);
-    SimpleObject* simpleObject = jsCast<SimpleObject*>(exec->argument(0).asCell());
+    VM& vm = exec->vm();
+    JSLockHolder lock(vm);
+    auto scope = DECLARE_THROW_SCOPE(vm);
+
+    SimpleObject* simpleObject = jsDynamicCast<SimpleObject*>(exec->argument(0));
+    if (UNLIKELY(!simpleObject)) {
+        throwTypeError(exec, scope, ASCIILiteral("Invalid use of setHiddenValue test function"));
+        return encodedJSValue();
+    }
     JSValue value = exec->argument(1);
     simpleObject->setHiddenValue(exec->vm(), value);
     return JSValue::encode(jsUndefined());
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to