| Index: tests/PDFJpegEmbedTest.cpp
|
| diff --git a/tests/PDFJpegEmbedTest.cpp b/tests/PDFJpegEmbedTest.cpp
|
| index b199c80e75441ab7c0f4cdfd32f90a267f8132c2..93c204401d1d7aae1b8435ff150e2dfcebd8ca27 100644
|
| --- a/tests/PDFJpegEmbedTest.cpp
|
| +++ b/tests/PDFJpegEmbedTest.cpp
|
| @@ -5,10 +5,11 @@
|
| * found in the LICENSE file.
|
| */
|
|
|
| -#include "SkDocument.h"
|
| #include "SkCanvas.h"
|
| -#include "SkImageGenerator.h"
|
| #include "SkData.h"
|
| +#include "SkDocument.h"
|
| +#include "SkImageGenerator.h"
|
| +#include "SkJpegInfo.h"
|
| #include "SkStream.h"
|
|
|
| #include "Resources.h"
|
| @@ -54,8 +55,9 @@ static sk_sp<SkData> load_resource(
|
| * directly embedded into the PDF (without re-encoding) when that
|
| * makes sense.
|
| */
|
| -DEF_TEST(PDFJpegEmbedTest, r) {
|
| - const char test[] = "PDFJpegEmbedTest";
|
| +DEF_TEST(SkPDF_JpegEmbedTest, r) {
|
| + REQUIRE_PDF_DOCUMENT(SkPDF_JpegEmbedTest, r);
|
| + const char test[] = "SkPDF_JpegEmbedTest";
|
| sk_sp<SkData> mandrillData(load_resource(r, test, "mandrill_512_q075.jpg"));
|
| sk_sp<SkData> cmykData(load_resource(r, test, "CMYK.jpg"));
|
| if (!mandrillData || !cmykData) {
|
| @@ -111,9 +113,7 @@ DEF_TEST(PDFJpegEmbedTest, r) {
|
| REPORTER_ASSERT(r, !is_subset_of(cmykData.get(), pdfData.get()));
|
| }
|
|
|
| -#include "SkJpegInfo.h"
|
| -
|
| -DEF_TEST(JpegIdentification, r) {
|
| +DEF_TEST(SkPDF_JpegIdentification, r) {
|
| static struct {
|
| const char* path;
|
| bool isJfif;
|
| @@ -144,4 +144,100 @@ DEF_TEST(JpegIdentification, r) {
|
| INFOF(r, "\nJpegIdentification: %s [%d x %d]\n", kTests[i].path,
|
| info.fSize.width(), info.fSize.height());
|
| }
|
| +
|
| + // Test several malformed jpegs.
|
| + SkJFIFInfo info;
|
| + {
|
| + static const char goodJpeg[] =
|
| + "\377\330\377\340\0\20JFIF\0\1\1\0\0\1\0\1\0\0\377\333\0C\0\10\6\6\7"
|
| + "\6\5\10\7\7\7\t\t\10\n\14\24\r\14\13\13\14\31\22\23\17\24\35\32\37"
|
| + "\36\35\32\34\34 $.' \",#\34\34(7),01444\37'9=82<.342\377\333\0C\1\t"
|
| + "\t\t\14\13\14\30\r\r\0302!\34!222222222222222222222222222222222222"
|
| + "22222222222222\377\300\0\21\10\2\0\2\0\3\1\"\0\2\21\1\3\21\001";
|
| + size_t goodJpegLength = 177;
|
| + auto data = SkData::MakeWithoutCopy(goodJpeg, goodJpegLength);
|
| + REPORTER_ASSERT(r, SkIsJFIF(data.get(), &info));
|
| + REPORTER_ASSERT(r, info.fSize == SkISize::Make(512, 512));
|
| + REPORTER_ASSERT(r, info.fType == SkJFIFInfo::kYCbCr);
|
| +
|
| + // Not long enough to read first (SOI) segment marker.
|
| + data = SkData::MakeWithoutCopy(goodJpeg, 1);
|
| + REPORTER_ASSERT(r, !SkIsJFIF(data.get(), &info));
|
| +
|
| + // Not long enough to read second segment (APP0) marker.
|
| + data = SkData::MakeWithoutCopy(goodJpeg, 3);
|
| + REPORTER_ASSERT(r, !SkIsJFIF(data.get(), &info));
|
| +
|
| + // Not long enough to read second segment's length.
|
| + data = SkData::MakeWithoutCopy(goodJpeg, 5);
|
| + REPORTER_ASSERT(r, !SkIsJFIF(data.get(), &info));
|
| +
|
| + // APP0 segment is truncated.
|
| + data = SkData::MakeWithoutCopy(goodJpeg, 7);
|
| + REPORTER_ASSERT(r, !SkIsJFIF(data.get(), &info));
|
| +
|
| + // Missing SOF segment.
|
| + data = SkData::MakeWithoutCopy(goodJpeg, 89);
|
| + REPORTER_ASSERT(r, !SkIsJFIF(data.get(), &info));
|
| + }
|
| + {
|
| + // JFIF tag missing.
|
| + static const char jpeg[] =
|
| + "\377\330\377\340\0\20JFIX\0\1\1\0\0\1\0\1\0\0\377\333\0C\0\10\6\6\7"
|
| + "\6\5\10\7\7\7\t\t\10\n\14\24\r\14\13\13\14\31\22\23\17\24\35\32\37"
|
| + "\36\35\32\34\34 $.' \",#\34\34(7),01444\37'9=82<.342\377\333\0C\1\t"
|
| + "\t\t\14\13\14\30\r\r\0302!\34!222222222222222222222222222222222222"
|
| + "22222222222222\377\300\0\21\10\2\0\2\0\3\1\"\0\2\21\1\3\21\001";
|
| + size_t jpegLength = 177;
|
| + auto data = SkData::MakeWithoutCopy(jpeg, jpegLength);
|
| + REPORTER_ASSERT(r, !SkIsJFIF(data.get(), &info));
|
| + }
|
| + {
|
| + // APP0 segment short (byte 6 changed).
|
| + static const char jpeg[] =
|
| + "\377\330\377\340\0\5JFIF\0\1\1\0\0\1\0\1\0\0\377\333\0C\0\10\6\6\7"
|
| + "\6\5\10\7\7\7\t\t\10\n\14\24\r\14\13\13\14\31\22\23\17\24\35\32\37"
|
| + "\36\35\32\34\34 $.' \",#\34\34(7),01444\37'9=82<.342\377\333\0C\1\t"
|
| + "\t\t\14\13\14\30\r\r\0302!\34!222222222222222222222222222222222222"
|
| + "22222222222222\377\300\0\21\10\2\0\2\0\3\1\"\0\2\21\1\3\21\001";
|
| + size_t jpegLength = 177;
|
| + auto data = SkData::MakeWithoutCopy(jpeg, jpegLength);
|
| + REPORTER_ASSERT(r, !SkIsJFIF(data.get(), &info));
|
| + }
|
| + {
|
| + // SOF segment short. ('\21' replaced with '\5')
|
| + static const char jpeg[] =
|
| + "\377\330\377\340\0\20JFIF\0\1\1\0\0\1\0\1\0\0\377\333\0C\0\10\6\6\7"
|
| + "\6\5\10\7\7\7\t\t\10\n\14\24\r\14\13\13\14\31\22\23\17\24\35\32\37"
|
| + "\36\35\32\34\34 $.' \",#\34\34(7),01444\37'9=82<.342\377\333\0C\1\t"
|
| + "\t\t\14\13\14\30\r\r\0302!\34!222222222222222222222222222222222222"
|
| + "22222222222222\377\300\0\5\10\2\0\2\0\3\1\"\0\2\21\1\3\21\001";
|
| + size_t jpegLength = 177;
|
| + auto data = SkData::MakeWithoutCopy(jpeg, jpegLength);
|
| + REPORTER_ASSERT(r, !SkIsJFIF(data.get(), &info));
|
| + }
|
| + {
|
| + // Unsupported 12-bit components. ('\10' replaced with '\14')
|
| + static const char jpeg[] =
|
| + "\377\330\377\340\0\20JFIF\0\1\1\0\0\1\0\1\0\0\377\333\0C\0\10\6\6\7"
|
| + "\6\5\10\7\7\7\t\t\10\n\14\24\r\14\13\13\14\31\22\23\17\24\35\32\37"
|
| + "\36\35\32\34\34 $.' \",#\34\34(7),01444\37'9=82<.342\377\333\0C\1\t"
|
| + "\t\t\14\13\14\30\r\r\0302!\34!222222222222222222222222222222222222"
|
| + "22222222222222\377\300\0\21\14\2\0\2\0\3\1\"\0\2\21\1\3\21\001";
|
| + size_t jpegLength = 177;
|
| + auto data = SkData::MakeWithoutCopy(jpeg, jpegLength);
|
| + REPORTER_ASSERT(r, !SkIsJFIF(data.get(), &info));
|
| + }
|
| + {
|
| + // Two color channels. ('\3' replaced with '\2')
|
| + static const char jpeg[] =
|
| + "\377\330\377\340\0\20JFIF\0\1\1\0\0\1\0\1\0\0\377\333\0C\0\10\6\6\7"
|
| + "\6\5\10\7\7\7\t\t\10\n\14\24\r\14\13\13\14\31\22\23\17\24\35\32\37"
|
| + "\36\35\32\34\34 $.' \",#\34\34(7),01444\37'9=82<.342\377\333\0C\1\t"
|
| + "\t\t\14\13\14\30\r\r\0302!\34!222222222222222222222222222222222222"
|
| + "22222222222222\377\300\0\21\10\2\0\2\0\2\1\"\0\2\21\1\3\21\001";
|
| + size_t jpegLength = 177;
|
| + auto data = SkData::MakeWithoutCopy(jpeg, jpegLength);
|
| + REPORTER_ASSERT(r, !SkIsJFIF(data.get(), &info));
|
| + }
|
| }
|
|
|