Index: tests/CodexTest.cpp |
diff --git a/tests/CodexTest.cpp b/tests/CodexTest.cpp |
index 80164b294bbc03faf31dcbc2877b78582e5a4d60..ec6d6451962e7db1d002045f536a945b4f73ad33 100644 |
--- a/tests/CodexTest.cpp |
+++ b/tests/CodexTest.cpp |
@@ -10,6 +10,7 @@ |
#include "SkCodec.h" |
#include "SkMD5.h" |
#include "SkRandom.h" |
+#include "SkScaledCodec.h" |
#include "SkScanlineDecoder.h" |
#include "Test.h" |
@@ -281,17 +282,19 @@ static void test_dimensions(skiatest::Reporter* r, const char path[]) { |
SkDebugf("Missing resource '%s'\n", path); |
return; |
} |
- SkAutoTDelete<SkCodec> codec(SkCodec::NewFromStream(stream.detach())); |
+ SkAutoTDelete<SkCodec> codec(SkScaledCodec::NewFromStream(stream.detach())); |
if (!codec) { |
ERRORF(r, "Unable to create codec '%s'", path); |
return; |
} |
// Check that the decode is successful for a variety of scales |
- for (float scale = -0.05f; scale < 2.0f; scale += 0.05f) { |
+ for (float scale = 0.05f; scale < 2.0f; scale += 0.05f) { |
// Scale the output dimensions |
SkISize scaledDims = codec->getScaledDimensions(scale); |
- SkImageInfo scaledInfo = codec->getInfo().makeWH(scaledDims.width(), scaledDims.height()); |
+ SkImageInfo scaledInfo = codec->getInfo() |
+ .makeWH(scaledDims.width(), scaledDims.height()) |
+ .makeColorType(kN32_SkColorType); |
// Set up for the decode |
size_t rowBytes = scaledDims.width() * sizeof(SkPMColor); |
@@ -312,6 +315,21 @@ DEF_TEST(Codec_Dimensions, r) { |
test_dimensions(r, "grayscale.jpg"); |
test_dimensions(r, "mandrill_512_q075.jpg"); |
test_dimensions(r, "randPixels.jpg"); |
+ |
+ // Decoding small images with very large scaling factors is a potential |
+ // source of bugs and crashes. We disable these tests in Gold because |
+ // tiny images are not very useful to look at. |
+ // Here we make sure that we do not crash or access illegal memory when |
+ // performing scaled decodes on small images. |
+ test_dimensions(r, "1x1.png"); |
+ test_dimensions(r, "2x2.png"); |
+ test_dimensions(r, "3x3.png"); |
+ test_dimensions(r, "3x1.png"); |
+ test_dimensions(r, "1x1.png"); |
+ test_dimensions(r, "16x1.png"); |
+ test_dimensions(r, "1x16.png"); |
+ test_dimensions(r, "mandrill_16.png"); |
+ |
} |
static void test_invalid(skiatest::Reporter* r, const char path[]) { |