Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(536)

Unified Diff: tests/PDFJpegEmbedTest.cpp

Issue 2322133003: SkPDF/Tests: imporve test coverage. (Closed)
Patch Set: toms nit Created 4 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « tests/PDFInvalidBitmapTest.cpp ('k') | tests/PDFPrimitivesTest.cpp » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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));
+ }
}
« no previous file with comments | « tests/PDFInvalidBitmapTest.cpp ('k') | tests/PDFPrimitivesTest.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698