diff options
| author | Leon Scroggins III <scroggo@google.com> | 2017-04-24 09:32:50 -0400 |
|---|---|---|
| committer | Skia Commit-Bot <skia-commit-bot@chromium.org> | 2017-04-24 14:02:15 +0000 |
| commit | b644650e091c86cfadff0fbc2a83ee5ca35a735f (patch) | |
| tree | 5a6685e956aa359b19bbfa1fe4b8f4e846377d6a /tests/CodecPartialTest.cpp | |
| parent | df2bf213649e0b2bcb9402548af9976bbdf7a218 (diff) | |
Fix decoding incomplete PNG images
If process_data is unable to read (and therefore process) as many bytes
as it expects, process the bytes read before returning false.
Fixes differences in Gold.
Add a test that verifies that it is okay to call png_process_data with
0 bytes. (We could special case 0, but libpng already checks for 0.)
Change-Id: Id500b9305ee3bb6a1a7e8fc70d4e723cb4742b55
Reviewed-on: https://skia-review.googlesource.com/14144
Commit-Queue: Leon Scroggins <scroggo@google.com>
Reviewed-by: Matt Sarett <msarett@google.com>
Diffstat (limited to 'tests/CodecPartialTest.cpp')
| -rw-r--r-- | tests/CodecPartialTest.cpp | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/tests/CodecPartialTest.cpp b/tests/CodecPartialTest.cpp index c029922f71..13cea8a298 100644 --- a/tests/CodecPartialTest.cpp +++ b/tests/CodecPartialTest.cpp @@ -401,3 +401,28 @@ DEF_TEST(Codec_GifPreMap, r) { compare_bitmaps(r, truth, bm); } } + +DEF_TEST(Codec_emptyIDAT, r) { + const char* name = "baby_tux.png"; + sk_sp<SkData> file = GetResourceAsData(name); + if (!file) { + SkDebugf("REMOVE\n"); + return; + } + + // Truncate to the beginning of the IDAT, immediately after the IDAT tag. + file = SkData::MakeSubset(file.get(), 0, 80); + + std::unique_ptr<SkCodec> codec(SkCodec::NewFromData(std::move(file))); + if (!codec) { + ERRORF(r, "Failed to create a codec for %s", name); + return; + } + + SkBitmap bm; + const auto info = standardize_info(codec.get()); + bm.allocPixels(info); + + const auto result = codec->getPixels(info, bm.getPixels(), bm.rowBytes()); + REPORTER_ASSERT(r, SkCodec::kIncompleteInput == result); +} |
