summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/pdf/qpdfdocument.cpp9
-rw-r--r--src/pdf/qpdfdocument_p.h1
-rw-r--r--tests/auto/pdf/qpdfdocument/pdf-sample.protected.pdfbin0 -> 9138 bytes
-rw-r--r--tests/auto/pdf/qpdfdocument/tst_qpdfdocument.cpp11
4 files changed, 19 insertions, 2 deletions
diff --git a/src/pdf/qpdfdocument.cpp b/src/pdf/qpdfdocument.cpp
index a202bc9f0..b6fd203cd 100644
--- a/src/pdf/qpdfdocument.cpp
+++ b/src/pdf/qpdfdocument.cpp
@@ -96,7 +96,10 @@ QPdfDocument::Error QPdfDocumentPrivate::load(QIODevice *newDevice, bool transfe
password = documentPassword.toUtf8();
doc = FPDF_LoadCustomDocument(this, password.constData());
- setErrorCode();
+ if (doc)
+ clearError();
+ else
+ setErrorCode();
return lastError;
}
@@ -147,7 +150,9 @@ void QPdfDocumentPrivate::tryLoadDocument()
Q_ASSERT(!doc);
doc = FPDFAvail_GetDocument(avail, password);
- if (!doc) {
+ if (doc) {
+ clearError();
+ } else {
setErrorCode();
if (lastError == QPdfDocument::IncorrectPasswordError)
emit q->passwordRequired();
diff --git a/src/pdf/qpdfdocument_p.h b/src/pdf/qpdfdocument_p.h
index b2e1aafa6..4d274b15c 100644
--- a/src/pdf/qpdfdocument_p.h
+++ b/src/pdf/qpdfdocument_p.h
@@ -46,6 +46,7 @@ public:
static int fpdf_GetBlock(void* param, unsigned long position, unsigned char* pBuf, unsigned long size);
static void fpdf_AddSegment(struct _FX_DOWNLOADHINTS* pThis, size_t offset, size_t size);
void setErrorCode();
+ void clearError() { lastError = QPdfDocument::NoError; }
};
QT_END_NAMESPACE
diff --git a/tests/auto/pdf/qpdfdocument/pdf-sample.protected.pdf b/tests/auto/pdf/qpdfdocument/pdf-sample.protected.pdf
new file mode 100644
index 000000000..d76fdd1a6
--- /dev/null
+++ b/tests/auto/pdf/qpdfdocument/pdf-sample.protected.pdf
Binary files differ
diff --git a/tests/auto/pdf/qpdfdocument/tst_qpdfdocument.cpp b/tests/auto/pdf/qpdfdocument/tst_qpdfdocument.cpp
index 306591208..6ebd1979f 100644
--- a/tests/auto/pdf/qpdfdocument/tst_qpdfdocument.cpp
+++ b/tests/auto/pdf/qpdfdocument/tst_qpdfdocument.cpp
@@ -18,6 +18,7 @@ private slots:
void pageCount();
void loadFromIODevice();
void loadAsync();
+ void password();
};
struct TemporaryPdf: public QTemporaryFile
@@ -89,6 +90,16 @@ void tst_QPdfDocument::loadAsync()
QCOMPARE(doc.pageCount(), 2);
}
+void tst_QPdfDocument::password()
+{
+ QPdfDocument doc;
+ QCOMPARE(doc.pageCount(), 0);
+ QCOMPARE(doc.load(QFINDTESTDATA("pdf-sample.protected.pdf")), QPdfDocument::IncorrectPasswordError);
+ QCOMPARE(doc.load(QFINDTESTDATA("pdf-sample.protected.pdf"), QStringLiteral("WrongPassword")), QPdfDocument::IncorrectPasswordError);
+ QCOMPARE(doc.load(QFINDTESTDATA("pdf-sample.protected.pdf"), QStringLiteral("Qt")), QPdfDocument::NoError);
+ QCOMPARE(doc.pageCount(), 1);
+}
+
QTEST_MAIN(tst_QPdfDocument)
#include "tst_qpdfdocument.moc"