vcl/source/pdf/PDFEncryptorR6.cxx |    2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

New commits:
commit aa36e523d609fb32e09a7643cf58e7d7b2b2a56e
Author:     Tomaž Vajngerl <tomaz.vajng...@collabora.co.uk>
AuthorDate: Tue Dec 24 15:35:30 2024 +0900
Commit:     Miklos Vajna <vmik...@collabora.com>
CommitDate: Thu Jan 2 13:45:13 2025 +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/+/179300
    Tested-by: Jenkins CollaboraOffice <jenkinscollaboraoff...@gmail.com>
    Reviewed-by: Miklos Vajna <vmik...@collabora.com>

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