| Index: Source/core/platform/image-decoders/gif/GIFImageDecoder.cpp
 | 
| diff --git a/Source/core/platform/image-decoders/gif/GIFImageDecoder.cpp b/Source/core/platform/image-decoders/gif/GIFImageDecoder.cpp
 | 
| index 4e2db963dffc5ede3e21f8a66ab361e6271a6acd..3d52f1249ed00ff74f9441ff9f0baf9eed497d56 100644
 | 
| --- a/Source/core/platform/image-decoders/gif/GIFImageDecoder.cpp
 | 
| +++ b/Source/core/platform/image-decoders/gif/GIFImageDecoder.cpp
 | 
| @@ -134,8 +134,7 @@ bool GIFImageDecoder::setFailed()
 | 
|      return ImageDecoder::setFailed();
 | 
|  }
 | 
|  
 | 
| -// FIXME: Can the intermediate |rowBuffer| be avoided?
 | 
| -bool GIFImageDecoder::haveDecodedRow(size_t frameIndex, const Vector<unsigned char>& rowBuffer, size_t width, size_t rowNumber, unsigned repeatCount, bool writeTransparentPixels)
 | 
| +bool GIFImageDecoder::haveDecodedRow(size_t frameIndex, Vector<unsigned char>::const_iterator rowBegin, size_t width, size_t rowNumber, unsigned repeatCount, bool writeTransparentPixels)
 | 
|  {
 | 
|      const GIFFrameContext* frameContext = m_reader->frameContext(frameIndex);
 | 
|      // The pixel data and coordinates supplied to us are relative to the frame's
 | 
| @@ -148,7 +147,7 @@ bool GIFImageDecoder::haveDecodedRow(size_t frameIndex, const Vector<unsigned ch
 | 
|      const int yBegin = frameContext->yOffset() + rowNumber;
 | 
|      const int xEnd = std::min(static_cast<int>(frameContext->xOffset() + width), size().width());
 | 
|      const int yEnd = std::min(static_cast<int>(frameContext->yOffset() + rowNumber + repeatCount), size().height());
 | 
| -    if (rowBuffer.isEmpty() || (xBegin < 0) || (yBegin < 0) || (xEnd <= xBegin) || (yEnd <= yBegin))
 | 
| +    if (!width || (xBegin < 0) || (yBegin < 0) || (xEnd <= xBegin) || (yEnd <= yBegin))
 | 
|          return true;
 | 
|  
 | 
|      const GIFColorMap::Table& colorTable = frameContext->localColorMap().isDefined() ? frameContext->localColorMap().table() : m_reader->globalColorMap().table();
 | 
| @@ -164,7 +163,6 @@ bool GIFImageDecoder::haveDecodedRow(size_t frameIndex, const Vector<unsigned ch
 | 
|          return false;
 | 
|  
 | 
|      const size_t transparentPixel = frameContext->transparentPixel();
 | 
| -    Vector<unsigned char>::const_iterator rowBegin = rowBuffer.begin();
 | 
|      Vector<unsigned char>::const_iterator rowEnd = rowBegin + (xEnd - xBegin);
 | 
|      ImageFrame::PixelData* currentAddress = buffer.getAddr(xBegin, yBegin);
 | 
|  
 | 
| 
 |