vcl/qa/cppunit/pdfexport/PDFEncryptionTest.cxx | 3 --- vcl/source/pdf/PDFEncryptorR6.cxx | 2 +- 2 files changed, 1 insertion(+), 4 deletions(-)
New commits: commit 20dadf1713424f157232b9aa4988ef05df751aaa Author: Tomaž Vajngerl <[email protected]> AuthorDate: Tue Dec 24 15:35:30 2024 +0900 Commit: Tomaž Vajngerl <[email protected]> CommitDate: Tue Dec 24 15:29:49 2024 +0100 pdf: fix PDF encryption and re-enable the test Slightly wrong loop exit condition when calculating the R6 hash, which caused that every now and then the document could not be decrypted correctly. This happened at least 1 time in 100 tries (usually it did not even take that much to encountered a test failure), but with the fix it worked correctly for 500 tries, so it seems this issue is now fixed. Change-Id: I5fa046892f36dabc367aabed1295802e805ee6e4 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/179299 Tested-by: Jenkins Reviewed-by: Tomaž Vajngerl <[email protected]> diff --git a/vcl/qa/cppunit/pdfexport/PDFEncryptionTest.cxx b/vcl/qa/cppunit/pdfexport/PDFEncryptionTest.cxx index ba72be283b71..e279039a4f15 100644 --- a/vcl/qa/cppunit/pdfexport/PDFEncryptionTest.cxx +++ b/vcl/qa/cppunit/pdfexport/PDFEncryptionTest.cxx @@ -107,8 +107,6 @@ CPPUNIT_TEST_FIXTURE(PDFEncryptionTest, testEncryptionRoundtrip_PDF_1_7) CPPUNIT_ASSERT_EQUAL(17, nFileVersion); } -/* Temporary comment out to not cause more random test failures - CPPUNIT_TEST_FIXTURE(PDFEncryptionTest, testEncryptionRoundtrip_PDF_2_0) { loadFromURL(u"private:factory/swriter"_ustr); @@ -129,7 +127,6 @@ CPPUNIT_TEST_FIXTURE(PDFEncryptionTest, testEncryptionRoundtrip_PDF_2_0) int nFileVersion = pPdfDocument->getFileVersion(); CPPUNIT_ASSERT_EQUAL(20, nFileVersion); } -*/ CPPUNIT_TEST_FIXTURE(PDFEncryptionTest, testComputeHashForR6) { diff --git a/vcl/source/pdf/PDFEncryptorR6.cxx b/vcl/source/pdf/PDFEncryptorR6.cxx index 52dceddc9636..6363ace090a8 100644 --- a/vcl/source/pdf/PDFEncryptorR6.cxx +++ b/vcl/source/pdf/PDFEncryptorR6.cxx @@ -235,7 +235,7 @@ std::vector<sal_uInt8> computeHashR6(const sal_uInt8* pPassword, size_t nPasswor } // Step e) and f) // We stop iteration if we do at least 64 rounds and (the last element of E <= round number - 32) - while (nRound < 64 || E.back() > (nRound - 32)); + while (nRound <= 64 || E.back() > (nRound - 32)); // Output - first 32 bytes return std::vector<sal_uInt8>(K.begin(), K.begin() + 32);
