Add a test for decoding a gif with sampleSize 4.

Prior to https://codereview.chromium.org/1085253002/, this would crash.

Only happens with interlaced gif images with an odd height. (Maybe
there are more restrictions?)

Test image provided by zoran.jovanovic@sonymobile.com for checking in.

Add include before includes.

Review URL: https://codereview.chromium.org/1091053002
This commit is contained in:
scroggo 2015-05-14 14:44:13 -07:00 committed by Commit bot
parent 87a773c5b1
commit 9d214295e4
2 changed files with 24 additions and 0 deletions

BIN
resources/test640x479.gif Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 72 KiB

View File

@ -5,12 +5,15 @@
* found in the LICENSE file.
*/
#include "SkTypes.h"
// This tests out GIF decoder (SkImageDecoder_libgif.cpp)
// It is not used on these platforms:
#if (!defined(SK_BUILD_FOR_WIN32)) && \
(!defined(SK_BUILD_FOR_IOS)) && \
(!defined(SK_BUILD_FOR_MAC))
#include "Resources.h"
#include "SkBitmap.h"
#include "SkData.h"
#include "SkForceLinking.h"
@ -197,4 +200,25 @@ DEF_TEST(Gif, reporter) {
// "libgif warning [interlace DGifGetLine]"
}
// Regression test for decoding a gif image with sampleSize of 4, which was
// previously crashing.
DEF_TEST(Gif_Sampled, r) {
SkFILEStream fileStream(GetResourcePath("test640x479.gif").c_str());
REPORTER_ASSERT(r, fileStream.isValid());
if (!fileStream.isValid()) {
return;
}
SkAutoTDelete<SkImageDecoder> decoder(SkImageDecoder::Factory(&fileStream));
REPORTER_ASSERT(r, decoder);
if (!decoder) {
return;
}
decoder->setSampleSize(4);
SkBitmap bm;
const SkImageDecoder::Result result = decoder->decode(&fileStream, &bm,
SkImageDecoder::kDecodePixels_Mode);
REPORTER_ASSERT(r, result == SkImageDecoder::kSuccess);
}
#endif // !(SK_BUILD_FOR_WIN32||SK_BUILD_FOR_IOS||SK_BUILD_FOR_MAC)