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);

Reply via email to