diff options
author | Nelson Benítez León <nbenitezl@gmail.com> | 2024-02-21 19:56:46 +0000 |
---|---|---|
committer | Albert Astals Cid <aacid@kde.org> | 2024-02-22 08:11:10 +0000 |
commit | a9266633d203432234ab2dab621f61374eed2d66 (patch) | |
tree | aa05b8ac9d05d586c4b59ced0e5927c5769d28f3 | |
parent | 87fab6144828cf52fbefb484ef7024c06ceaf6b1 (diff) |
Fix regression on encrypted files being repaired
Some encrypted files which need repairing (see
links below) failed to open due to a regression
introduced in commit b3e86dbdba where an 'if
condition' was added that's hit by encrypted files
which need repairing.
The removal of this 'if condition' does not affect
the original buggy file that commit b3e86dbdba
targeted[1].
This commit also adds Qt5 and Qt6 tests for opening
an encrypted pdf file affected by this issue.
Fixes #1447
Fixes https://gitlab.gnome.org/GNOME/evince/-/issues/1889
Regression issue:
https://bugs.freedesktop.org/show_bug.cgi?id=14303
[1] which can be found in this duplicate:
https://bugs.freedesktop.org/show_bug.cgi?id=14399
-rw-r--r-- | poppler/XRef.cc | 2 | ||||
-rw-r--r-- | qt5/tests/check_password.cpp | 13 | ||||
-rw-r--r-- | qt6/tests/check_password.cpp | 10 |
3 files changed, 24 insertions, 1 deletions
diff --git a/poppler/XRef.cc b/poppler/XRef.cc index 8b48c4de..13175df5 100644 --- a/poppler/XRef.cc +++ b/poppler/XRef.cc @@ -935,7 +935,7 @@ bool XRef::constructXRef(bool *wasReconstructed, bool needCatalogDict) Object newTrailerDict = parser->getObj(); if (newTrailerDict.isDict()) { const Object &obj = newTrailerDict.dictLookupNF("Root"); - if (obj.isRef() && (!gotRoot || !needCatalogDict) && rootNum != obj.getRefNum()) { + if (obj.isRef() && (!gotRoot || !needCatalogDict)) { rootNum = obj.getRefNum(); rootGen = obj.getRefGen(); trailerDict = newTrailerDict.copy(); diff --git a/qt5/tests/check_password.cpp b/qt5/tests/check_password.cpp index 94e19b17..4207c5eb 100644 --- a/qt5/tests/check_password.cpp +++ b/qt5/tests/check_password.cpp @@ -16,6 +16,7 @@ private slots: void password3(); void password4(); void password4b(); + void password5(); }; // BUG:4557 @@ -111,5 +112,17 @@ void TestPassword::password4b() delete doc; } +void TestPassword::password5() +{ + Poppler::Document *doc; + doc = Poppler::Document::load(QString::fromUtf8(TESTDATADIR "/unittestcases/PasswordEncryptedReconstructed.pdf")); + QVERIFY(doc); + QVERIFY(doc->isLocked()); + QVERIFY(!doc->unlock("", "test")); + QVERIFY(!doc->isLocked()); + + delete doc; +} + QTEST_GUILESS_MAIN(TestPassword) #include "check_password.moc" diff --git a/qt6/tests/check_password.cpp b/qt6/tests/check_password.cpp index 24b6f4fa..f473fdc9 100644 --- a/qt6/tests/check_password.cpp +++ b/qt6/tests/check_password.cpp @@ -16,6 +16,7 @@ private slots: void password3(); void password4(); void password4b(); + void password5(); }; // BUG:4557 @@ -87,5 +88,14 @@ void TestPassword::password4b() QVERIFY(!doc->isLocked()); } +void TestPassword::password5() +{ + std::unique_ptr<Poppler::Document> doc = Poppler::Document::load(QString::fromUtf8(TESTDATADIR "/unittestcases/PasswordEncryptedReconstructed.pdf")); + QVERIFY(doc); + QVERIFY(doc->isLocked()); + QVERIFY(!doc->unlock("", "test")); + QVERIFY(!doc->isLocked()); +} + QTEST_GUILESS_MAIN(TestPassword) #include "check_password.moc" |