Changeset 26941 in webkit


Ignore:
Timestamp:
Oct 23, 2007 6:51:04 PM (17 years ago)
Author:
mitz
Message:

Reviewed by Eric Seidel.

Calling updateWidget() during attach() led to arbitrary (plugin and resource load delegate)
code execution under attach(). The fix is to use the mechanism that's already in place for
deferring updateWidget() until after layout.

  • html/HTMLEmbedElement.cpp: (WebCore::HTMLEmbedElement::attach): Replaced call to updateWidget() with call to updateWidgetSoon()
  • html/HTMLObjectElement.cpp: (WebCore::HTMLObjectElement::attach): Ditto.
  • manual-tests/paint-during-plugin-attach.html: Added.
  • rendering/RenderPartObject.cpp: (WebCore::RenderPartObject::updateWidgetSoon): Added this function that schedules the updateWidget() call for after the next layout.
  • rendering/RenderPartObject.h:
Location:
trunk/WebCore
Files:
1 added
5 edited

Legend:

Unmodified
Added
Removed
  • trunk/WebCore/ChangeLog

    r26937 r26941  
     12007-10-23  Dan Bernstein  <mitz@apple.com>
     2
     3        Reviewed by Eric Seidel.
     4
     5        - fix http://bugs.webkit.org/show_bug.cgi?id=15405
     6          ASSERTION FAILED: d->m_view && !d->m_view->needsLayout() in Frame::Paint
     7
     8        Calling updateWidget() during attach() led to arbitrary (plugin and resource load delegate)
     9        code execution under attach(). The fix is to use the mechanism that's already in place for
     10        deferring updateWidget() until after layout.
     11
     12        * html/HTMLEmbedElement.cpp:
     13        (WebCore::HTMLEmbedElement::attach): Replaced call to updateWidget() with call to updateWidgetSoon()
     14        * html/HTMLObjectElement.cpp:
     15        (WebCore::HTMLObjectElement::attach): Ditto.
     16        * manual-tests/paint-during-plugin-attach.html: Added.
     17        * rendering/RenderPartObject.cpp:
     18        (WebCore::RenderPartObject::updateWidgetSoon): Added this function that schedules the
     19        updateWidget() call for after the next layout.
     20        * rendering/RenderPartObject.h:
     21
    1222007-10-23  Adam Roben  <aroben@apple.com>
    223
  • trunk/WebCore/html/HTMLEmbedElement.cpp

    r25754 r26941  
    157157
    158158    if (renderer())
    159         static_cast<RenderPartObject*>(renderer())->updateWidget(true);
     159        static_cast<RenderPartObject*>(renderer())->updateWidgetSoon();
    160160}
    161161
  • trunk/WebCore/html/HTMLObjectElement.cpp

    r25754 r26941  
    187187                // this method or recalcStyle (which also calls updateWidget) to be called.
    188188                m_needWidgetUpdate = false;
    189                 static_cast<RenderPartObject*>(renderer())->updateWidget(true);
     189                static_cast<RenderPartObject*>(renderer())->updateWidgetSoon();
    190190            } else {
    191191                m_needWidgetUpdate = true;
  • trunk/WebCore/rendering/RenderPartObject.cpp

    r25754 r26941  
    281281}
    282282
     283void RenderPartObject::updateWidgetSoon()
     284{
     285    if (m_view)
     286        m_view->addWidgetToUpdate(this);
     287}
     288
    283289void RenderPartObject::viewCleared()
    284290{
  • trunk/WebCore/rendering/RenderPartObject.h

    r25754 r26941  
    3939    virtual void layout();
    4040    void updateWidget(bool onlyCreateNonPlugins);
     41    void updateWidgetSoon();
    4142
    4243    virtual void viewCleared();
Note: See TracChangeset for help on using the changeset viewer.