diff options
Diffstat (limited to 'xmlsecurity/qa/unit/signing/signing.cxx')
-rw-r--r-- | xmlsecurity/qa/unit/signing/signing.cxx | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/xmlsecurity/qa/unit/signing/signing.cxx b/xmlsecurity/qa/unit/signing/signing.cxx index 3876a19b566b..5d00a5506a61 100644 --- a/xmlsecurity/qa/unit/signing/signing.cxx +++ b/xmlsecurity/qa/unit/signing/signing.cxx @@ -95,6 +95,8 @@ public: void testPDFGood(); /// Test a typical PDF where the signature is bad. void testPDFBad(); + /// Test a maliciously manipulated signed pdf + void testPDFHideAndReplace(); /// Test a typical PDF which is not signed. void testPDFNo(); #endif @@ -141,6 +143,7 @@ public: #if HAVE_FEATURE_PDFIMPORT CPPUNIT_TEST(testPDFGood); CPPUNIT_TEST(testPDFBad); + CPPUNIT_TEST(testPDFHideAndReplace); CPPUNIT_TEST(testPDFNo); #endif CPPUNIT_TEST(test96097Calc); @@ -603,6 +606,22 @@ void SigningTest::testPDFBad() CPPUNIT_ASSERT_EQUAL(static_cast<int>(SignatureState::BROKEN), static_cast<int>(pObjectShell->GetDocumentSignatureState())); } +void SigningTest::testPDFHideAndReplace() +{ + createDoc(m_directories.getURLFromSrc(DATA_DIRECTORY) + + "hide-and-replace-shadow-file-signed-2.pdf"); + SfxBaseModel* pBaseModel = dynamic_cast<SfxBaseModel*>(mxComponent.get()); + CPPUNIT_ASSERT(pBaseModel); + SfxObjectShell* pObjectShell = pBaseModel->GetObjectShell(); + CPPUNIT_ASSERT(pObjectShell); + // Without the accompanying fix in place, this test would have failed with: + // - Expected: 2 (BROKEN) + // - Actual : 6 (NOTVALIDATED_PARTIAL_OK) + // i.e. a non-commenting update after a signature was not marked as invalid. + CPPUNIT_ASSERT_EQUAL(static_cast<int>(SignatureState::BROKEN), + static_cast<int>(pObjectShell->GetDocumentSignatureState())); +} + void SigningTest::testPDFNo() { createDoc(m_directories.getURLFromSrc(DATA_DIRECTORY) + "no.pdf"); |