Changeset 87709 in webkit


Ignore:
Timestamp:
May 30, 2011 10:00:51 PM (13 years ago)
Author:
commit-queue@webkit.org
Message:

2011-05-30 Andrey Petrov <andrey.petrov@gmail.com>

Reviewed by Hajime Morita.

Using jQuery to show/hide IMG elements crashes WebKit
https://bugs.webkit.org/show_bug.cgi?id=31721

  • editing/pasteboard/copy-standalone-image-crash-expected.txt: Added.
  • editing/pasteboard/copy-standalone-image-crash.html: Added.

2011-05-30 Andrey Petrov <andrey.petrov@gmail.com>

Reviewed by Hajime Morita.

Using jQuery to show/hide IMG elements crashes WebKit
https://bugs.webkit.org/show_bug.cgi?id=31721

For platform code, do not assert nodes always have renderer at
the time context menu action is invoked.
Renderer can actually be empty for a given node if it was hidden
or removed from domtree by some non-user generated event (e.g timeout)
after the popup menu had been created.

Changing Chromium, Gtk, Mac, Qt, Win and WinCE.

Test: editing/pasteboard/copy-standalone-image-crash.html

  • platform/chromium/PasteboardChromium.cpp: (WebCore::Pasteboard::writeImage):
  • platform/gtk/PasteboardGtk.cpp: (WebCore::Pasteboard::writeImage):
  • platform/mac/PasteboardMac.mm: (WebCore::Pasteboard::writeImage):
  • platform/qt/PasteboardQt.cpp: (WebCore::Pasteboard::writeImage):
  • platform/win/PasteboardWin.cpp: (WebCore::Pasteboard::writeImage):
  • platform/wince/PasteboardWinCE.cpp: (WebCore::Pasteboard::writeImage):
Location:
trunk
Files:
2 added
8 edited

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r87705 r87709  
     12011-05-30  Andrey Petrov  <andrey.petrov@gmail.com>
     2
     3        Reviewed by Hajime Morita.
     4
     5        Using jQuery to show/hide IMG elements crashes WebKit
     6        https://bugs.webkit.org/show_bug.cgi?id=31721
     7
     8        * editing/pasteboard/copy-standalone-image-crash-expected.txt: Added.
     9        * editing/pasteboard/copy-standalone-image-crash.html: Added.
     10
    1112011-05-30  Kent Tamura  <tkent@chromium.org>
    212
  • trunk/Source/WebCore/ChangeLog

    r87708 r87709  
     12011-05-30  Andrey Petrov  <andrey.petrov@gmail.com>
     2
     3        Reviewed by Hajime Morita.
     4
     5        Using jQuery to show/hide IMG elements crashes WebKit
     6        https://bugs.webkit.org/show_bug.cgi?id=31721
     7
     8        For platform code, do not assert nodes always have renderer at
     9        the time context menu action is invoked.
     10        Renderer can actually be empty for a given node if it was hidden
     11        or removed from domtree by some non-user generated event (e.g timeout)
     12        after the popup menu had been created.
     13
     14        Changing Chromium, Gtk, Mac, Qt, Win and WinCE.
     15
     16        Test: editing/pasteboard/copy-standalone-image-crash.html
     17
     18        * platform/chromium/PasteboardChromium.cpp:
     19        (WebCore::Pasteboard::writeImage):
     20        * platform/gtk/PasteboardGtk.cpp:
     21        (WebCore::Pasteboard::writeImage):
     22        * platform/mac/PasteboardMac.mm:
     23        (WebCore::Pasteboard::writeImage):
     24        * platform/qt/PasteboardQt.cpp:
     25        (WebCore::Pasteboard::writeImage):
     26        * platform/win/PasteboardWin.cpp:
     27        (WebCore::Pasteboard::writeImage):
     28        * platform/wince/PasteboardWinCE.cpp:
     29        (WebCore::Pasteboard::writeImage):
     30
    1312011-05-30  Daniel Bates  <dbates@webkit.org>
    232
  • trunk/Source/WebCore/platform/chromium/PasteboardChromium.cpp

    r76340 r87709  
    123123{
    124124    ASSERT(node);
    125     ASSERT(node->renderer());
    126     ASSERT(node->renderer()->isImage());
     125
     126    if (!(node->renderer() && node->renderer()->isImage()))
     127        return;
     128
    127129    RenderImage* renderer = toRenderImage(node->renderer());
    128130    CachedImage* cachedImage = renderer->cachedImage();
     
    131133    Image* image = cachedImage->image();
    132134    ASSERT(image);
    133    
     135
    134136    NativeImagePtr bitmap = image->nativeImageForCurrentFrame();
    135137    if (!bitmap)
  • trunk/Source/WebCore/platform/gtk/PasteboardGtk.cpp

    r85064 r87709  
    119119{
    120120    ASSERT(node);
    121     ASSERT(node->renderer());
     121
     122    if (!(node->renderer() && node->renderer()->isImage()))
     123        return;
     124
    122125    RenderImage* renderer = toRenderImage(node->renderer());
    123126    CachedImage* cachedImage = renderer->cachedImage();
  • trunk/Source/WebCore/platform/mac/PasteboardMac.mm

    r87189 r87709  
    292292{
    293293    ASSERT(node);
     294
     295    if (!(node->renderer() && node->renderer()->isImage()))
     296        return;
     297
    294298    Frame* frame = node->document()->frame();
    295299
     
    297301    ASSERT(cocoaURL);
    298302
    299     ASSERT(node->renderer() && node->renderer()->isImage());
    300303    RenderImage* renderer = toRenderImage(node->renderer());
    301304    CachedImage* cachedImage = renderer->cachedImage();
  • trunk/Source/WebCore/platform/qt/PasteboardQt.cpp

    r81967 r87709  
    153153void Pasteboard::writeImage(Node* node, const KURL&, const String&)
    154154{
    155     ASSERT(node && node->renderer() && node->renderer()->isImage());
     155    ASSERT(node);
     156
     157    if (!(node->renderer() && node->renderer()->isImage()))
     158        return;
    156159
    157160#ifndef QT_NO_CLIPBOARD
  • trunk/Source/WebCore/platform/win/PasteboardWin.cpp

    r85420 r87709  
    209209void Pasteboard::writeImage(Node* node, const KURL&, const String&)
    210210{
    211     ASSERT(node && node->renderer() && node->renderer()->isImage());
     211    ASSERT(node);
     212
     213    if (!(node->renderer() && node->renderer()->isImage()))
     214        return;
     215
    212216    RenderImage* renderer = toRenderImage(node->renderer());
    213217    CachedImage* cachedImage = renderer->cachedImage();
  • trunk/Source/WebCore/platform/wince/PasteboardWinCE.cpp

    r67788 r87709  
    201201void Pasteboard::writeImage(Node* node, const KURL&, const String&)
    202202{
    203     ASSERT(node && node->renderer() && node->renderer()->isImage());
     203    ASSERT(node);
     204
     205    if (!(node->renderer() && node->renderer()->isImage()))
     206        return;
     207
    204208    RenderImage* renderer = static_cast<RenderImage*>(node->renderer());
    205209    CachedImage* cachedImage = static_cast<CachedImage*>(renderer->cachedImage());
Note: See TracChangeset for help on using the changeset viewer.