⚠ Archived content — this site is no longer maintained.   Current WebKit documentation is at docs.webkit.org.

Changeset 243249 in webkit


Ignore:
Timestamp:
Mar 20, 2019, 3:49:44 PM (7 years ago)
Author:
dino@apple.com
Message:

[iOS] Crash in WebCore::Node::renderRect
https://bugs.webkit.org/show_bug.cgi?id=196035
<rdar://problem/49076783>

Reviewed by Antoine Quint.

When renderRect was called on an HTMLAreaElement, it would
ASSERT because it doesn't have a renderer. We hadn't noticed
this before because none of our tests were hitting this in
debug mode.

The fix is to ask the corresponding HTMLImageElement for
its renderer, and use that for the returned rectangle.

Covered by these tests that had become flakey:

fast/images/imagemap-in-shadow-tree.html
http/tests/download/area-download.html

  • dom/Node.cpp:

(WebCore::Node::renderRect):

Location:
trunk/Source/WebCore
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r243247 r243249  
     12019-03-20  Dean Jackson  <dino@apple.com>
     2
     3        [iOS] Crash in WebCore::Node::renderRect
     4        https://bugs.webkit.org/show_bug.cgi?id=196035
     5        <rdar://problem/49076783>
     6
     7        Reviewed by Antoine Quint.
     8
     9        When renderRect was called on an HTMLAreaElement, it would
     10        ASSERT because it doesn't have a renderer. We hadn't noticed
     11        this before because none of our tests were hitting this in
     12        debug mode.
     13
     14        The fix is to ask the corresponding HTMLImageElement for
     15        its renderer, and use that for the returned rectangle.
     16
     17        Covered by these tests that had become flakey:
     18            fast/images/imagemap-in-shadow-tree.html
     19            http/tests/download/area-download.html
     20
     21        * dom/Node.cpp:
     22        (WebCore::Node::renderRect):
     23
    1242019-03-20  Youenn Fablet  <youenn@apple.com>
    225
  • trunk/Source/WebCore/dom/Node.cpp

    r243233 r243249  
    4343#include "EventHandler.h"
    4444#include "FrameView.h"
     45#include "HTMLAreaElement.h"
    4546#include "HTMLBodyElement.h"
    4647#include "HTMLCollection.h"
     
    796797{   
    797798    RenderObject* hitRenderer = this->renderer();
    798     ASSERT(hitRenderer);
     799    if (!hitRenderer && is<HTMLAreaElement>(*this)) {
     800        auto& area = downcast<HTMLAreaElement>(*this);
     801        if (auto* imageElement = area.imageElement())
     802            hitRenderer = imageElement->renderer();
     803    }
    799804    RenderObject* renderer = hitRenderer;
    800805    while (renderer && !renderer->isBody() && !renderer->isDocumentElementRenderer()) {
Note: See TracChangeset for help on using the changeset viewer.