From 7712c26b05c85399afbf8cb3d363836e678ad443 Mon Sep 17 00:00:00 2001 From: etienneb Date: Tue, 26 Apr 2016 08:13:45 -0700 Subject: Fix unittest with embedded NUL character. There is an embedded NUL character (previously line 40). The test was working because the beginning ot the string is identical. But, the rest of the string wasn't compare at all. TESTED: manually etienneb@burger:~/src/pdfium/pdfium$ out/Debug/pdfium_embeddertests --gtest_filter=*.EmptyCreation Note: Google Test filter = *.EmptyCreation [==========] Running 1 test from 1 test case. [----------] Global test environment set-up. [----------] 1 test from FPDFEditEmbeddertest [ RUN ] FPDFEditEmbeddertest.EmptyCreation [ OK ] FPDFEditEmbeddertest.EmptyCreation (13 ms) [----------] 1 test from FPDFEditEmbeddertest (13 ms total) [----------] Global test environment tear-down [==========] 1 test from 1 test case ran. (13 ms total) [ PASSED ] 1 test. R=dsinclair BUG=589955 Review URL: https://codereview.chromium.org/1916083002 --- fpdfsdk/fpdfedit_embeddertest.cpp | 88 ++++++++++++++++++++++----------------- 1 file changed, 49 insertions(+), 39 deletions(-) diff --git a/fpdfsdk/fpdfedit_embeddertest.cpp b/fpdfsdk/fpdfedit_embeddertest.cpp index 480ef51dbd..720dcdec01 100644 --- a/fpdfsdk/fpdfedit_embeddertest.cpp +++ b/fpdfsdk/fpdfedit_embeddertest.cpp @@ -11,50 +11,60 @@ class FPDFEditEmbeddertest : public EmbedderTest, public TestSaver {}; +namespace { +const char kExpectedPDF[] = + "%PDF-1.7\r\n" + "%\xA1\xB3\xC5\xD7\r\n" + "1 0 obj\r\n" + "<>\r\n" + "endobj\r\n" + "2 0 obj\r\n" + "<>\r\n" + "endobj\r\n" + "3 0 obj\r\n" + "<>\r\n" + "endobj\r\n" + "4 0 obj\r\n" + "<>/Rotate 0/Type/Page" + ">>\r\n" + "endobj\r\n" + "5 0 obj\r\n" + "<>stream\r\n" + // Character '_' is matching '\0' (see comment below). + "x\x9C\x3____\x1\r\n" + "endstream\r\n" + "endobj\r\n" + "xref\r\n" + "0 6\r\n" + "0000000000 65535 f\r\n" + "0000000017 00000 n\r\n" + "0000000066 00000 n\r\n" + "0000000122 00000 n\r\n" + "0000000192 00000 n\r\n" + "0000000301 00000 n\r\n" + "trailer\r\n" + "<<\r\n" + "/Root 1 0 R\r\n" + "/Info 3 0 R\r\n" + "/Size 6/ID\\[<.*><.*>\\]>>\r\n" + "startxref\r\n" + "379\r\n" + "%%EOF\r\n"; +} // namespace + TEST_F(FPDFEditEmbeddertest, EmptyCreation) { EXPECT_TRUE(CreateEmptyDocument()); FPDF_PAGE page = FPDFPage_New(document(), 1, 640.0, 480.0); EXPECT_NE(nullptr, page); EXPECT_TRUE(FPDFPage_GenerateContent(page)); EXPECT_TRUE(FPDF_SaveAsCopy(document(), this, 0)); - EXPECT_THAT(GetString(), - testing::MatchesRegex( - "%PDF-1.7\r\n" - "%\xA1\xB3\xC5\xD7\r\n" - "1 0 obj\r\n" - "<>\r\n" - "endobj\r\n" - "2 0 obj\r\n" - "<>\r\n" - "endobj\r\n" - "3 0 obj\r\n" - "<>\r\n" - "endobj\r\n" - "4 0 obj\r\n" - "<>/Rotate 0/Type/Page" - ">>\r\n" - "endobj\r\n" - "5 0 obj\r\n" - "<>stream\r\n" - "x\x9C\x3\0\0\0\0\x1\r\n" - "endstream\r\n" - "endobj\r\n" - "xref\r\n" - "0 6\r\n" - "0000000000 65535 f\r\n" - "0000000017 00000 n\r\n" - "0000000066 00000 n\r\n" - "0000000122 00000 n\r\n" - "0000000192 00000 n\r\n" - "0000000301 00000 n\r\n" - "trailer\r\n" - "<<\r\n" - "/Root 1 0 R\r\n" - "/Info 3 0 R\r\n" - "/Size 6/ID\\[<.*><.*>\\]>>\r\n" - "startxref\r\n" - "379\r\n" - "%%EOF\r\n")); + + // The MatchesRegexp doesn't support embedded NUL ('\0') characters. They are + // replaced by '_' for the purpose of the test. + std::string result = GetString(); + std::replace(result.begin(), result.end(), '\0', '_'); + EXPECT_THAT(result, testing::MatchesRegex( + std::string(kExpectedPDF, sizeof(kExpectedPDF)))); FPDFPage_Delete(document(), 1); } -- cgit v1.2.3