summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNelson Benítez León <nbenitezl@gmail.com>2024-02-21 19:56:46 +0000
committerAlbert Astals Cid <aacid@kde.org>2024-02-22 08:11:10 +0000
commita9266633d203432234ab2dab621f61374eed2d66 (patch)
treeaa05b8ac9d05d586c4b59ced0e5927c5769d28f3
parent87fab6144828cf52fbefb484ef7024c06ceaf6b1 (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.cc2
-rw-r--r--qt5/tests/check_password.cpp13
-rw-r--r--qt6/tests/check_password.cpp10
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"