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:
parent
87a773c5b1
commit
9d214295e4
BIN
resources/test640x479.gif
Normal file
BIN
resources/test640x479.gif
Normal file
Binary file not shown.
After Width: | Height: | Size: 72 KiB |
@ -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)
|
||||
|
Loading…
Reference in New Issue
Block a user