Changeset 275361 in webkit


Ignore:
Timestamp:
Apr 1, 2021 8:35:21 AM (3 years ago)
Author:
mark.lam@apple.com
Message:

Fix some missing exception checks in HTMLMediaElement methods.
https://bugs.webkit.org/show_bug.cgi?id=224038
rdar://69573092

Reviewed by Eric Carlson.

Source/WebCore:

Test: media/missing-exception-checks-in-HTMLMediaElement-methods.html

  • html/HTMLMediaElement.cpp:

(WebCore::HTMLMediaElement::setupAndCallJS):
(WebCore::HTMLMediaElement::updateCaptionContainer):
(WebCore::HTMLMediaElement::ensureMediaControlsInjectedScript):
(WebCore::HTMLMediaElement::setControllerJSProperty):
(WebCore::HTMLMediaElement::didAddUserAgentShadowRoot):
(WebCore::HTMLMediaElement::updateMediaControlsAfterPresentationModeChange):
(WebCore::HTMLMediaElement::getCurrentMediaControlsStatus):

LayoutTests:

  • media/missing-exception-checks-in-HTMLMediaElement-methods-expected.txt: Added.
  • media/missing-exception-checks-in-HTMLMediaElement-methods.html: Added.
Location:
trunk
Files:
2 added
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r275358 r275361  
     12021-04-01  Mark Lam  <mark.lam@apple.com>
     2
     3        Fix some missing exception checks in HTMLMediaElement methods.
     4        https://bugs.webkit.org/show_bug.cgi?id=224038
     5        rdar://69573092
     6
     7        Reviewed by Eric Carlson.
     8
     9        * media/missing-exception-checks-in-HTMLMediaElement-methods-expected.txt: Added.
     10        * media/missing-exception-checks-in-HTMLMediaElement-methods.html: Added.
     11
    1122021-04-01  Devin Rousso  <drousso@apple.com>
    213
  • trunk/Source/WebCore/ChangeLog

    r275360 r275361  
     12021-04-01  Mark Lam  <mark.lam@apple.com>
     2
     3        Fix some missing exception checks in HTMLMediaElement methods.
     4        https://bugs.webkit.org/show_bug.cgi?id=224038
     5        rdar://69573092
     6
     7        Reviewed by Eric Carlson.
     8
     9        Test: media/missing-exception-checks-in-HTMLMediaElement-methods.html
     10
     11        * html/HTMLMediaElement.cpp:
     12        (WebCore::HTMLMediaElement::setupAndCallJS):
     13        (WebCore::HTMLMediaElement::updateCaptionContainer):
     14        (WebCore::HTMLMediaElement::ensureMediaControlsInjectedScript):
     15        (WebCore::HTMLMediaElement::setControllerJSProperty):
     16        (WebCore::HTMLMediaElement::didAddUserAgentShadowRoot):
     17        (WebCore::HTMLMediaElement::updateMediaControlsAfterPresentationModeChange):
     18        (WebCore::HTMLMediaElement::getCurrentMediaControlsStatus):
     19
    1202021-04-01  Jean-Yves Avenard  <jya@apple.com>
    221
  • trunk/Source/WebCore/html/HTMLMediaElement.cpp

    r275359 r275361  
    43124312    auto& vm = globalObject->vm();
    43134313    JSC::JSLockHolder lock(vm);
    4314     auto scope = DECLARE_THROW_SCOPE(vm);
    43154314    auto* lexicalGlobalObject = globalObject;
    4316 
    4317     RETURN_IF_EXCEPTION(scope, false);
    4318 
    43194315    return task(*globalObject, *lexicalGlobalObject, scriptController, world);
    43204316}
     
    43364332        auto& vm = globalObject.vm();
    43374333        auto scope = DECLARE_CATCH_SCOPE(vm);
     4334
     4335        auto reportExceptionAndReturnFalse = [&] () -> bool {
     4336            auto* exception = scope.exception();
     4337            scope.clearException();
     4338            reportException(&globalObject, exception);
     4339            return false;
     4340        };
     4341
    43384342        auto controllerValue = controllerJSValue(lexicalGlobalObject, globalObject, *this);
     4343        RETURN_IF_EXCEPTION(scope, reportExceptionAndReturnFalse());
     4344
    43394345        auto* controllerObject = JSC::jsDynamicCast<JSC::JSObject*>(vm, controllerValue);
    43404346        if (!controllerObject)
     
    43484354        //     None
    43494355        auto methodValue = controllerObject->get(&lexicalGlobalObject, JSC::Identifier::fromString(vm, "updateCaptionContainer"));
     4356        RETURN_IF_EXCEPTION(scope, reportExceptionAndReturnFalse());
     4357
    43504358        auto* methodObject = JSC::jsDynamicCast<JSC::JSObject*>(vm, methodValue);
    43514359        if (!methodObject)
     
    43594367        ASSERT(!noArguments.hasOverflowed());
    43604368        JSC::call(&lexicalGlobalObject, methodObject, callData, controllerObject, noArguments);
    4361         scope.clearException();
     4369        RETURN_IF_EXCEPTION(scope, reportExceptionAndReturnFalse());
    43624370
    43634371        m_haveSetUpCaptionContainer = true;
     
    71577165        auto scope = DECLARE_CATCH_SCOPE(vm);
    71587166
     7167        auto reportExceptionAndReturnFalse = [&] () -> bool {
     7168            auto* exception = scope.exception();
     7169            scope.clearException();
     7170            reportException(&globalObject, exception);
     7171            return false;
     7172        };
     7173
    71597174        auto functionValue = globalObject.get(&lexicalGlobalObject, JSC::Identifier::fromString(vm, "createControls"));
     7175        RETURN_IF_EXCEPTION(scope, reportExceptionAndReturnFalse());
    71607176        if (functionValue.isCallable(vm))
    71617177            return true;
     
    71657181                continue;
    71667182            scriptController.evaluateInWorldIgnoringException(ScriptSourceCode(mediaControlsScript), world);
    7167             if (UNLIKELY(scope.exception())) {
    7168                 auto* exception = scope.exception();
    7169                 scope.clearException();
    7170                 reportException(&globalObject, exception);
    7171                 return false;
    7172             }
     7183            RETURN_IF_EXCEPTION(scope, reportExceptionAndReturnFalse());
    71737184        }
    71747185
     
    72007211    setupAndCallJS([this, propertyName, propertyValue](JSDOMGlobalObject& globalObject, JSC::JSGlobalObject& lexicalGlobalObject, ScriptController&, DOMWrapperWorld&) {
    72017212        auto& vm = globalObject.vm();
     7213        auto scope = DECLARE_THROW_SCOPE(vm);
     7214
    72027215        auto controllerValue = controllerJSValue(lexicalGlobalObject, globalObject, *this);
     7216        EXCEPTION_ASSERT_UNUSED(scope, !scope.exception() || controllerValue.isNull());
    72037217        if (controllerValue.isNull())
    72047218            return false;
     
    72097223            return false;
    72107224
     7225        scope.release();
    72117226        controllerObject->methodTable(vm)->put(controllerObject, &lexicalGlobalObject, JSC::Identifier::fromString(vm, propertyName), propertyValue, propertySlot);
    72127227
     
    72577272            return false;
    72587273
     7274        auto reportExceptionAndReturnFalse = [&] () -> bool {
     7275            auto* exception = scope.exception();
     7276            scope.clearException();
     7277            reportException(&globalObject, exception);
     7278            return false;
     7279        };
     7280
    72597281        auto controllerValue = JSC::call(&lexicalGlobalObject, function, callData, &globalObject, argList);
    7260         scope.clearException();
     7282        RETURN_IF_EXCEPTION(scope, reportExceptionAndReturnFalse());
     7283
    72617284        auto* controllerObject = JSC::jsDynamicCast<JSC::JSObject*>(vm, controllerValue);
    72627285        if (!controllerObject)
     
    72837306
    72847307        updatePageScaleFactorJSProperty();
     7308        RETURN_IF_EXCEPTION(scope, reportExceptionAndReturnFalse());
     7309
    72857310        updateUsesLTRUserInterfaceLayoutDirectionJSProperty();
    7286 
    7287         if (UNLIKELY(scope.exception()))
    7288             scope.clearException();
     7311        RETURN_IF_EXCEPTION(scope, reportExceptionAndReturnFalse());
    72897312
    72907313        return true;
     
    73187341
    73197342        auto controllerValue = controllerJSValue(lexicalGlobalObject, globalObject, *this);
     7343        RETURN_IF_EXCEPTION(scope, false);
    73207344        auto* controllerObject = controllerValue.toObject(&lexicalGlobalObject);
    7321 
    73227345        RETURN_IF_EXCEPTION(scope, false);
    73237346
     
    73627385
    73637386        auto controllerValue = controllerJSValue(lexicalGlobalObject, globalObject, *this);
     7387        RETURN_IF_EXCEPTION(scope, false);
    73647388        auto* controllerObject = controllerValue.toObject(&lexicalGlobalObject);
    7365 
    73667389        RETURN_IF_EXCEPTION(scope, false);
    73677390
Note: See TracChangeset for help on using the changeset viewer.