Bug 118497 - Leak: PNGImageDecoder::decode
Summary: Leak: PNGImageDecoder::decode
Status: RESOLVED INVALID
Alias: None
Product: WebKit
Classification: Unclassified
Component: Images (show other bugs)
Version: 528+ (Nightly build)
Hardware: Unspecified Unspecified
: P2 Normal
Assignee: Nobody
URL:
Keywords:
Depends on:
Blocks: 116317
  Show dependency treegraph
 
Reported: 2013-07-09 01:54 PDT by Brian Holt
Modified: 2013-07-09 07:39 PDT (History)
1 user (show)

See Also:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Brian Holt 2013-07-09 01:54:55 PDT
Leak in Source/WebCore/platform/image-decoders/png/PNGImageDecoder.cpp:122

Command: /home/likewise-open/SERILOCAL/brian.holt/Code/gnome3/WebKit/WebKitBuild/Debug/Programs/DumpRenderTree -
Leak_StillReachable
16,119 bytes in 7 blocks are still reachable in loss record 1,118 of 1,176
    malloc (/usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
    png_malloc (/lib/x86_64-linux-gnu/libpng12.so.0.49.0)
    png_create_read_struct_2 (/lib/x86_64-linux-gnu/libpng12.so.0.49.0)
    png_create_read_struct (/lib/x86_64-linux-gnu/libpng12.so.0.49.0)
    WebCore::PNGImageReader::PNGImageReader(WebCore::PNGImageDecoder*) (/WebKitBuild/Debug/../../Source/WebCore/platform/image-decoders/png/PNGImageDecoder.cpp:122)
    WebCore::PNGImageDecoder::decode(bool) (/WebKitBuild/Debug/../../Source/WebCore/platform/image-decoders/png/PNGImageDecoder.cpp:573)
    WebCore::PNGImageDecoder::isSizeAvailable() (/WebKitBuild/Debug/../../Source/WebCore/platform/image-decoders/png/PNGImageDecoder.cpp:237)
    WebCore::ImageSource::isSizeAvailable() (/WebKitBuild/Debug/../../Source/WebCore/platform/graphics/ImageSource.cpp:99)
    WebCore::BitmapImage::isSizeAvailable() (/WebKitBuild/Debug/../../Source/WebCore/platform/graphics/BitmapImage.cpp:283)
    WebCore::BitmapImage::dataChanged(bool) (/WebKitBuild/Debug/../../Source/WebCore/platform/graphics/BitmapImage.cpp:257)
    WebCore::Image::setData(WTF::PassRefPtr<WebCore::SharedBuffer>, bool) (/WebKitBuild/Debug/../../Source/WebCore/platform/graphics/Image.cpp:79)
    WebCore::loadImageFromFile(WTF::CString) (/WebKitBuild/Debug/../../Source/WebCore/platform/graphics/gtk/ImageGtk.cpp:85)
    WebCore::Image::loadPlatformResource(char const*) (/WebKitBuild/Debug/../../Source/WebCore/platform/graphics/gtk/ImageGtk.cpp:101)
    WebCore::CachedImage::brokenImage(float) const (/WebKitBuild/Debug/../../Source/WebCore/loader/cache/CachedImage.cpp:149)
    WebCore::CachedImage::imageForRenderer(WebCore::RenderObject const*) (/WebKitBuild/Debug/../../Source/WebCore/loader/cache/CachedImage.cpp:183)
    WebCore::RenderImage::setImageSizeForAltText(WebCore::CachedImage*) (/WebKitBuild/Debug/../../Source/WebCore/rendering/RenderImage.cpp:118)
    WebCore::RenderImage::imageChanged(void*, WebCore::IntRect const*) (/WebKitBuild/Debug/../../Source/WebCore/rendering/RenderImage.cpp:193)
    WebCore::RenderObject::imageChanged(WebCore::CachedImage*, WebCore::IntRect const*) (/WebKitBuild/Debug/../../Source/WebCore/rendering/RenderObject.cpp:3041)
    WebCore::CachedImage::notifyObservers(WebCore::IntRect const*) (/WebKitBuild/Debug/../../Source/WebCore/loader/cache/CachedImage.cpp:290)
    WebCore::CachedImage::error(WebCore::CachedResource::Status) (/WebKitBuild/Debug/../../Source/WebCore/loader/cache/CachedImage.cpp:436)
    WebCore::SubresourceLoader::didFail(WebCore::ResourceError const&) (/WebKitBuild/Debug/../../Source/WebCore/loader/SubresourceLoader.cpp:311)
    WebCore::ResourceLoader::didFail(WebCore::ResourceHandle*, WebCore::ResourceError const&) (/WebKitBuild/Debug/../../Source/WebCore/loader/ResourceLoader.cpp:495)
    WebCore::sendRequestCallback(_GObject*, _GAsyncResult*, void*) (/WebKitBuild/Debug/../../Source/WebCore/platform/network/soup/ResourceHandleSoup.cpp:675)
    g_task_return_now (/WebKitBuild/Dependencies/Source/glib-2.36.0/gio/gtask.c:1105)
    complete_in_idle_cb (/WebKitBuild/Dependencies/Source/glib-2.36.0/gio/gtask.c:1114)
    g_main_context_dispatch (/WebKitBuild/Dependencies/Source/glib-2.36.0/glib/gmain.c:3054)
    g_main_context_iterate.isra.22 (/WebKitBuild/Dependencies/Source/glib-2.36.0/glib/gmain.c:3701)
    g_main_loop_run (/WebKitBuild/Dependencies/Source/glib-2.36.0/glib/gmain.c:3895)
    gtk_main (/WebKitBuild/Dependencies/Source/gtk+-3.6.0/gtk/gtkmain.c:1163)
    runTest(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) (/WebKitBuild/Debug/../../Tools/DumpRenderTree/gtk/DumpRenderTree.cpp:769)
Suppression (error hash=#D378470C27AE48D2#):
  For more info on using suppressions see http://dev.chromium.org/developers/tree-sheriffs/sheriff-details-chromium/memory-sheriff#TOC-Suppressing-memory-reports
{
   <insert_a_suppression_name_here>
   Memcheck:Leak
   fun:malloc
   fun:png_malloc
   fun:png_create_read_struct_2
   fun:png_create_read_struct
   fun:_ZN7WebCore14PNGImageReaderC1EPNS_15PNGImageDecoderE
   fun:_ZN7WebCore15PNGImageDecoder6decodeEb
   fun:_ZN7WebCore15PNGImageDecoder15isSizeAvailableEv
   fun:_ZN7WebCore11ImageSource15isSizeAvailableEv
   fun:_ZN7WebCore11BitmapImage15isSizeAvailableEv
   fun:_ZN7WebCore11BitmapImage11dataChangedEb
   fun:_ZN7WebCore5Image7setDataEN3WTF10PassRefPtrINS_12SharedBufferEEEb
   fun:_ZN7WebCore17loadImageFromFileEN3WTF7CStringE
   fun:_ZN7WebCore5Image20loadPlatformResourceEPKc
   fun:_ZNK7WebCore11CachedImage11brokenImageEf
   fun:_ZN7WebCore11CachedImage16imageForRendererEPKNS_12RenderObjectE
   fun:_ZN7WebCore11RenderImage22setImageSizeForAltTextEPNS_11CachedImageE
   fun:_ZN7WebCore11RenderImage12imageChangedEPvPKNS_7IntRectE
   fun:_ZN7WebCore12RenderObject12imageChangedEPNS_11CachedImageEPKNS_7IntRectE
   fun:_ZN7WebCore11CachedImage15notifyObserversEPKNS_7IntRectE
   fun:_ZN7WebCore11CachedImage5errorENS_14CachedResource6StatusE
   fun:_ZN7WebCore17SubresourceLoader7didFailERKNS_13ResourceErrorE
   fun:_ZN7WebCore14ResourceLoader7didFailEPNS_14ResourceHandleERKNS_13ResourceErrorE
}
Comment 1 Anton Obzhirov 2013-07-09 01:58:03 PDT
I'll have a look - looks interesting.
Comment 2 Anton Obzhirov 2013-07-09 04:14:05 PDT
(In reply to comment #1)
> I'll have a look - looks interesting.

It looks like false positive. 

See at the end of 

void PNGImageDecoder::decode(bool onlySize) 

    // If we're done decoding the image, we don't need the PNGImageReader
    // anymore.  (If we failed, |m_reader| has already been cleared.)
    else if (isComplete())
        m_reader.clear();

png structure gets cleaned after reader is deleted or closed.
Comment 3 Brian Holt 2013-07-09 07:39:02 PDT
Marking as invalid since the leak level is Leak_StillReachable and is not definitely a leak.