Changeset 224017 in webkit


Ignore:
Timestamp:
Oct 26, 2017 6:14:00 AM (7 years ago)
Author:
Carlos Garcia Campos
Message:

[GTK][Stable] Crash on WebCore::SharedBuffer::data() on 2.18.1
https://bugs.webkit.org/show_bug.cgi?id=178852

Reviewed by Carlos Garcia Campos.

Add a mutex to control that the image decoders are not used at the same
time from the main thread and the decoding thread.

Backport of the fix to https://bugs.webkit.org/show_bug.cgi?id=178510
created by Fujii Hironori <Fujii Hironori>.

Covered by existent tests.

  • platform/image-decoders/ImageDecoder.cpp:

(WebCore::ImageDecoder::frameIsCompleteAtIndex):
(WebCore::ImageDecoder::frameHasAlphaAtIndex const):
(WebCore::ImageDecoder::frameBytesAtIndex const):
(WebCore::ImageDecoder::frameDurationAtIndex):
(WebCore::ImageDecoder::createFrameImageAtIndex):

  • platform/image-decoders/ImageDecoder.h:

(WebCore::ImageDecoder::setData):

Location:
releases/WebKitGTK/webkit-2.18/Source/WebCore
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • releases/WebKitGTK/webkit-2.18/Source/WebCore/ChangeLog

    r224016 r224017  
     12017-10-26  Carlos Garcia Campos  <cgarcia@igalia.com>
     2
     3        [GTK][Stable] Crash on WebCore::SharedBuffer::data() on 2.18.1
     4        https://bugs.webkit.org/show_bug.cgi?id=178852
     5
     6        Reviewed by Carlos Garcia Campos.
     7
     8        Add a mutex to control that the image decoders are not used at the same
     9        time from the main thread and the decoding thread.
     10
     11        Backport of the fix to https://bugs.webkit.org/show_bug.cgi?id=178510
     12        created by Fujii Hironori <Hironori.Fujii@sony.com>.
     13
     14        Covered by existent tests.
     15
     16        * platform/image-decoders/ImageDecoder.cpp:
     17        (WebCore::ImageDecoder::frameIsCompleteAtIndex):
     18        (WebCore::ImageDecoder::frameHasAlphaAtIndex const):
     19        (WebCore::ImageDecoder::frameBytesAtIndex const):
     20        (WebCore::ImageDecoder::frameDurationAtIndex):
     21        (WebCore::ImageDecoder::createFrameImageAtIndex):
     22        * platform/image-decoders/ImageDecoder.h:
     23        (WebCore::ImageDecoder::setData):
     24
    1252017-10-26  Carlos Garcia Campos  <cgarcia@igalia.com>
    226
  • releases/WebKitGTK/webkit-2.18/Source/WebCore/platform/image-decoders/ImageDecoder.cpp

    r217260 r224017  
    173173bool ImageDecoder::frameIsCompleteAtIndex(size_t index)
    174174{
     175    LockHolder lockHolder(m_mutex);
    175176    ImageFrame* buffer = frameBufferAtIndex(index);
    176177    return buffer && buffer->isComplete();
     
    179180bool ImageDecoder::frameHasAlphaAtIndex(size_t index) const
    180181{
     182    LockHolder lockHolder(m_mutex);
    181183    if (m_frameBufferCache.size() <= index)
    182184        return true;
     
    188190unsigned ImageDecoder::frameBytesAtIndex(size_t index) const
    189191{
     192    LockHolder lockHolder(m_mutex);
    190193    if (m_frameBufferCache.size() <= index)
    191194        return 0;
     
    196199float ImageDecoder::frameDurationAtIndex(size_t index)
    197200{
     201    LockHolder lockHolder(m_mutex);
    198202    ImageFrame* buffer = frameBufferAtIndex(index);
    199203    if (!buffer || buffer->isInvalid())
     
    212216NativeImagePtr ImageDecoder::createFrameImageAtIndex(size_t index, SubsamplingLevel, const DecodingOptions&)
    213217{
     218    LockHolder lockHolder(m_mutex);
    214219    // Zero-height images can cause problems for some ports. If we have an empty image dimension, just bail.
    215220    if (size().isEmpty())
  • releases/WebKitGTK/webkit-2.18/Source/WebCore/platform/image-decoders/ImageDecoder.h

    r218799 r224017  
    3434#include "SharedBuffer.h"
    3535#include <wtf/Assertions.h>
     36#include <wtf/Lock.h>
    3637#include <wtf/Optional.h>
    3738#include <wtf/RefPtr.h>
     
    7677    virtual void setData(SharedBuffer& data, bool allDataReceived)
    7778    {
     79        LockHolder lockHolder(m_mutex);
    7880        if (m_encodedDataStatus == EncodedDataStatus::Error)
    7981            return;
     
    209211    RefPtr<SharedBuffer> m_data; // The encoded data.
    210212    Vector<ImageFrame, 1> m_frameBufferCache;
     213    mutable Lock m_mutex;
    211214    bool m_scaled { false };
    212215    Vector<int> m_scaledColumns;
Note: See TracChangeset for help on using the changeset viewer.