Ignore:
Timestamp:
Mar 9, 2016, 10:10:59 AM (9 years ago)
Author:
[email protected]
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):

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/JavaScriptCore/jsc.cpp

    r197712 r197862  
    11751175{
    11761176    JSLockHolder lock(exec);
    1177     JSValue arg = exec->argument(0);
    1178     return JSValue::encode(Element::create(exec->vm(), exec->lexicalGlobalObject(), arg.isNull() ? nullptr : jsCast<Root*>(exec->argument(0))));
     1177    Root* root = jsDynamicCast<Root*>(exec->argument(0));
     1178    if (!root)
     1179        return JSValue::encode(jsUndefined());
     1180    return JSValue::encode(Element::create(exec->vm(), exec->lexicalGlobalObject(), root));
    11791181}
    11801182
     
    11821184{
    11831185    JSLockHolder lock(exec);
    1184     Element* result = jsCast<Root*>(exec->argument(0).asCell())->element();
     1186    Root* root = jsDynamicCast<Root*>(exec->argument(0));
     1187    if (!root)
     1188        return JSValue::encode(jsUndefined());
     1189    Element* result = root->element();
    11851190    return JSValue::encode(result ? result : jsUndefined());
    11861191}
     
    11891194{
    11901195    JSLockHolder lock(exec);
    1191     Element* element = jsCast<Element*>(exec->argument(0));
    1192     Root* root = jsCast<Root*>(exec->argument(1));
    1193     element->setRoot(exec->vm(), root);
     1196    Element* element = jsDynamicCast<Element*>(exec->argument(0));
     1197    Root* root = jsDynamicCast<Root*>(exec->argument(1));
     1198    if (element && root)
     1199        element->setRoot(exec->vm(), root);
    11941200    return JSValue::encode(jsUndefined());
    11951201}
Note: See TracChangeset for help on using the changeset viewer.