diff options
-rw-r--r-- | BUILD.gn | 1 | ||||
-rw-r--r-- | core/fpdfapi/page/fpdf_page_func_embeddertest.cpp | 1 | ||||
-rw-r--r-- | core/fpdfapi/parser/fpdf_parser_decode_embeddertest.cpp | 9 | ||||
-rw-r--r-- | core/fpdfapi/render/fpdf_render_loadimage_embeddertest.cpp | 3 | ||||
-rw-r--r-- | core/fpdfapi/render/fpdf_render_pattern_embeddertest.cpp | 1 | ||||
-rw-r--r-- | core/fxcodec/codec/fx_codec_embeddertest.cpp | 1 | ||||
-rw-r--r-- | testing/DEPS | 8 | ||||
-rw-r--r-- | testing/embedder_test.cpp | 36 | ||||
-rw-r--r-- | testing/embedder_test.h | 6 | ||||
-rw-r--r-- | testing/libfuzzer/DEPS | 3 |
10 files changed, 59 insertions, 10 deletions
@@ -193,6 +193,7 @@ static_library("test_support") { "testing/test_support.cpp", "testing/test_support.h", "testing/utils/path_service.cpp", + "testing/utils/path_service.h", ] deps = [ ":pdfium", diff --git a/core/fpdfapi/page/fpdf_page_func_embeddertest.cpp b/core/fpdfapi/page/fpdf_page_func_embeddertest.cpp index 2892036882..6a1b87b570 100644 --- a/core/fpdfapi/page/fpdf_page_func_embeddertest.cpp +++ b/core/fpdfapi/page/fpdf_page_func_embeddertest.cpp @@ -15,6 +15,7 @@ TEST_F(FPDFPageFuncEmbeddertest, Bug_551460) { FPDF_PAGE page = LoadPage(0); EXPECT_NE(nullptr, page); FPDF_BITMAP bitmap = RenderPage(page); + CompareBitmap(bitmap, 612, 792, "1940568c9ba33bac5d0b1ee9558c76b3"); FPDFBitmap_Destroy(bitmap); UnloadPage(page); } diff --git a/core/fpdfapi/parser/fpdf_parser_decode_embeddertest.cpp b/core/fpdfapi/parser/fpdf_parser_decode_embeddertest.cpp index 639dcbf44c..9dfc26e369 100644 --- a/core/fpdfapi/parser/fpdf_parser_decode_embeddertest.cpp +++ b/core/fpdfapi/parser/fpdf_parser_decode_embeddertest.cpp @@ -92,6 +92,7 @@ TEST_F(FPDFParserDecodeEmbeddertest, Bug_552046) { EXPECT_TRUE(OpenDocument("bug_552046.pdf")); FPDF_PAGE page = LoadPage(0); FPDF_BITMAP bitmap = RenderPage(page); + CompareBitmap(bitmap, 612, 792, "1940568c9ba33bac5d0b1ee9558c76b3"); FPDFBitmap_Destroy(bitmap); UnloadPage(page); } @@ -102,6 +103,7 @@ TEST_F(FPDFParserDecodeEmbeddertest, Bug_555784) { EXPECT_TRUE(OpenDocument("bug_555784.pdf")); FPDF_PAGE page = LoadPage(0); FPDF_BITMAP bitmap = RenderPage(page); + CompareBitmap(bitmap, 612, 792, "1940568c9ba33bac5d0b1ee9558c76b3"); FPDFBitmap_Destroy(bitmap); UnloadPage(page); } @@ -112,6 +114,13 @@ TEST_F(FPDFParserDecodeEmbeddertest, Bug_455199) { EXPECT_TRUE(OpenDocument("bug_455199.pdf")); FPDF_PAGE page = LoadPage(0); FPDF_BITMAP bitmap = RenderPage(page); +#if _FXM_PLATFORM_ == _FXM_PLATFORM_APPLE_ + // Rendering on Mac is inconsistent, so skip this check. + const char* const kExpectedMd5sum = nullptr; +#else + const char kExpectedMd5sum[] = "6f9f0fd903da177babb24dd50a806a56"; +#endif + CompareBitmap(bitmap, 200, 200, kExpectedMd5sum); FPDFBitmap_Destroy(bitmap); UnloadPage(page); } diff --git a/core/fpdfapi/render/fpdf_render_loadimage_embeddertest.cpp b/core/fpdfapi/render/fpdf_render_loadimage_embeddertest.cpp index 5c6a8c513f..5b7cbc6f05 100644 --- a/core/fpdfapi/render/fpdf_render_loadimage_embeddertest.cpp +++ b/core/fpdfapi/render/fpdf_render_loadimage_embeddertest.cpp @@ -14,6 +14,7 @@ TEST_F(FPDFRenderLoadImageEmbeddertest, Bug_554151) { FPDF_PAGE page = LoadPage(0); EXPECT_NE(nullptr, page); FPDF_BITMAP bitmap = RenderPage(page); + CompareBitmap(bitmap, 612, 792, "a14d7ee573c1b2456d7bf6b7762823cf"); FPDFBitmap_Destroy(bitmap); UnloadPage(page); } @@ -24,6 +25,7 @@ TEST_F(FPDFRenderLoadImageEmbeddertest, Bug_557223) { FPDF_PAGE page = LoadPage(0); EXPECT_NE(nullptr, page); FPDF_BITMAP bitmap = RenderPage(page); + CompareBitmap(bitmap, 24, 24, "dc0ea1b743c2edb22c597cadc8537f7b"); FPDFBitmap_Destroy(bitmap); UnloadPage(page); } @@ -34,6 +36,7 @@ TEST_F(FPDFRenderLoadImageEmbeddertest, Bug_603518) { FPDF_PAGE page = LoadPage(0); EXPECT_NE(nullptr, page); FPDF_BITMAP bitmap = RenderPage(page); + CompareBitmap(bitmap, 749, 749, "b9e75190cdc5edf0069a408744ca07dc"); FPDFBitmap_Destroy(bitmap); UnloadPage(page); } diff --git a/core/fpdfapi/render/fpdf_render_pattern_embeddertest.cpp b/core/fpdfapi/render/fpdf_render_pattern_embeddertest.cpp index 176c923372..ed6da46f2a 100644 --- a/core/fpdfapi/render/fpdf_render_pattern_embeddertest.cpp +++ b/core/fpdfapi/render/fpdf_render_pattern_embeddertest.cpp @@ -12,6 +12,7 @@ TEST_F(FPDFRenderPatternEmbeddertest, LoadError_547706) { EXPECT_TRUE(OpenDocument("bug_547706.pdf")); FPDF_PAGE page = LoadPage(0); FPDF_BITMAP bitmap = RenderPage(page); + CompareBitmap(bitmap, 612, 792, "1940568c9ba33bac5d0b1ee9558c76b3"); FPDFBitmap_Destroy(bitmap); UnloadPage(page); } diff --git a/core/fxcodec/codec/fx_codec_embeddertest.cpp b/core/fxcodec/codec/fx_codec_embeddertest.cpp index 441494c0e6..fd02f973a1 100644 --- a/core/fxcodec/codec/fx_codec_embeddertest.cpp +++ b/core/fxcodec/codec/fx_codec_embeddertest.cpp @@ -14,6 +14,7 @@ TEST_F(FXCodecEmbeddertest, Bug_631912) { FPDF_PAGE page = LoadPage(0); EXPECT_NE(nullptr, page); FPDF_BITMAP bitmap = RenderPage(page); + CompareBitmap(bitmap, 691, 432, "24d75af646f8772c5ee7ced260452ae4"); FPDFBitmap_Destroy(bitmap); UnloadPage(page); } diff --git a/testing/DEPS b/testing/DEPS index 4110b9b4d7..5adeb4141b 100644 --- a/testing/DEPS +++ b/testing/DEPS @@ -1,14 +1,6 @@ include_rules = [ - '+core/fpdfapi', - '+core/fxcodec', - '+core/fxcrt', - '+core/fxge', '+core', '+fxjs', '+public', '+v8', - '+xfa/fde', - '+xfa/fgas', - '+xfa/fxfa/fm2js', - '+xfa/fxfa/parser', ] diff --git a/testing/embedder_test.cpp b/testing/embedder_test.cpp index c23b5c8018..bc4c027c66 100644 --- a/testing/embedder_test.cpp +++ b/testing/embedder_test.cpp @@ -11,6 +11,7 @@ #include <utility> #include <vector> +#include "core/fdrm/crypto/fx_crypt.h" #include "public/fpdf_dataavail.h" #include "public/fpdf_edit.h" #include "public/fpdf_text.h" @@ -35,14 +36,26 @@ v8::StartupData* g_v8_snapshot = nullptr; #endif // V8_USE_EXTERNAL_STARTUP_DATA #endif // PDF_ENABLE_V8 -} // namespace - FPDF_BOOL Is_Data_Avail(FX_FILEAVAIL* pThis, size_t offset, size_t size) { return true; } void Add_Segment(FX_DOWNLOADHINTS* pThis, size_t offset, size_t size) {} +std::string CRYPT_ToBase16(const uint8_t* digest) { + static char const zEncode[] = "0123456789abcdef"; + std::string ret; + ret.resize(32); + for (int i = 0, j = 0; i < 16; i++, j += 2) { + uint8_t a = digest[i]; + ret[j] = zEncode[(a >> 4) & 0xf]; + ret[j + 1] = zEncode[a & 0xf]; + } + return ret; +} + +} // namespace + EmbedderTest::EmbedderTest() : default_delegate_(new EmbedderTest::Delegate()), document_(nullptr), @@ -323,6 +336,25 @@ FPDF_PAGE EmbedderTest::GetPageTrampoline(FPDF_FORMFILLINFO* info, page_index); } +// static +void EmbedderTest::CompareBitmap(FPDF_BITMAP bitmap, + int expected_width, + int expected_height, + const char* expected_md5sum) { + ASSERT_EQ(expected_width, FPDFBitmap_GetWidth(bitmap)); + ASSERT_EQ(expected_height, FPDFBitmap_GetHeight(bitmap)); + const int expected_stride = expected_width * 4; + ASSERT_EQ(expected_stride, FPDFBitmap_GetStride(bitmap)); + + if (!expected_md5sum) + return; + + uint8_t digest[16]; + CRYPT_MD5Generate(static_cast<uint8_t*>(FPDFBitmap_GetBuffer(bitmap)), + expected_stride * expected_height, digest); + EXPECT_EQ(expected_md5sum, CRYPT_ToBase16(digest)); +} + // Can't use gtest-provided main since we need to stash the path to the // executable in order to find the external V8 binary data files. int main(int argc, char** argv) { diff --git a/testing/embedder_test.h b/testing/embedder_test.h index dc4ca0dc08..cc0caec8f6 100644 --- a/testing/embedder_test.h +++ b/testing/embedder_test.h @@ -105,6 +105,12 @@ class EmbedderTest : public ::testing::Test, // is prohibited after this call is made. virtual void UnloadPage(FPDF_PAGE page); + // Check |bitmap| to make sure it has the right dimensions and content. + static void CompareBitmap(FPDF_BITMAP bitmap, + int expected_width, + int expected_height, + const char* expected_md5sum); + protected: void SetupFormFillEnvironment(); diff --git a/testing/libfuzzer/DEPS b/testing/libfuzzer/DEPS new file mode 100644 index 0000000000..b1d034ed8c --- /dev/null +++ b/testing/libfuzzer/DEPS @@ -0,0 +1,3 @@ +include_rules = [ + '+xfa', +] |