Title: [197862] trunk/Source/_javascript_Core
Revision
197862
Author
[email protected]
Date
2016-03-09 10:10:59 -0800 (Wed, 09 Mar 2016)

Log Message

Harden JSC Root element functions from bad values
https://bugs.webkit.org/show_bug.cgi?id=155234

Reviewed by Saam Barati.

Changed jsCast() to jsDynamicCast() in Root related function to protect against being
called with non-Root arguments.

* jsc.cpp:
(functionCreateElement):
(functionGetElement):
(functionSetElementRoot):

Modified Paths

Diff

Modified: trunk/Source/_javascript_Core/ChangeLog (197861 => 197862)


--- trunk/Source/_javascript_Core/ChangeLog	2016-03-09 17:51:38 UTC (rev 197861)
+++ trunk/Source/_javascript_Core/ChangeLog	2016-03-09 18:10:59 UTC (rev 197862)
@@ -1,3 +1,18 @@
+2016-03-09  Michael Saboff  <[email protected]>
+
+        Harden JSC Root element functions from bad values
+        https://bugs.webkit.org/show_bug.cgi?id=155234
+
+        Reviewed by Saam Barati.
+
+        Changed jsCast() to jsDynamicCast() in Root related function to protect against being
+        called with non-Root arguments.
+
+        * jsc.cpp:
+        (functionCreateElement):
+        (functionGetElement):
+        (functionSetElementRoot):
+
 2016-03-09  Benjamin Poulain  <[email protected]>
 
         [JSC] Pick how to OSR Enter to FTL at runtime instead of compile time

Modified: trunk/Source/_javascript_Core/jsc.cpp (197861 => 197862)


--- trunk/Source/_javascript_Core/jsc.cpp	2016-03-09 17:51:38 UTC (rev 197861)
+++ trunk/Source/_javascript_Core/jsc.cpp	2016-03-09 18:10:59 UTC (rev 197862)
@@ -1174,23 +1174,29 @@
 EncodedJSValue JSC_HOST_CALL functionCreateElement(ExecState* exec)
 {
     JSLockHolder lock(exec);
-    JSValue arg = exec->argument(0);
-    return JSValue::encode(Element::create(exec->vm(), exec->lexicalGlobalObject(), arg.isNull() ? nullptr : jsCast<Root*>(exec->argument(0))));
+    Root* root = jsDynamicCast<Root*>(exec->argument(0));
+    if (!root)
+        return JSValue::encode(jsUndefined());
+    return JSValue::encode(Element::create(exec->vm(), exec->lexicalGlobalObject(), root));
 }
 
 EncodedJSValue JSC_HOST_CALL functionGetElement(ExecState* exec)
 {
     JSLockHolder lock(exec);
-    Element* result = jsCast<Root*>(exec->argument(0).asCell())->element();
+    Root* root = jsDynamicCast<Root*>(exec->argument(0));
+    if (!root)
+        return JSValue::encode(jsUndefined());
+    Element* result = root->element();
     return JSValue::encode(result ? result : jsUndefined());
 }
 
 EncodedJSValue JSC_HOST_CALL functionSetElementRoot(ExecState* exec)
 {
     JSLockHolder lock(exec);
-    Element* element = jsCast<Element*>(exec->argument(0));
-    Root* root = jsCast<Root*>(exec->argument(1));
-    element->setRoot(exec->vm(), root);
+    Element* element = jsDynamicCast<Element*>(exec->argument(0));
+    Root* root = jsDynamicCast<Root*>(exec->argument(1));
+    if (element && root)
+        element->setRoot(exec->vm(), root);
     return JSValue::encode(jsUndefined());
 }
 
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to