From e6ea11e2923b30be0a2b5bd121f5c6ef81b7c5e5 Mon Sep 17 00:00:00 2001 From: Mark Karpeles Date: Mon, 28 Jun 2021 21:04:38 +0900 Subject: [PATCH 1/2] fix https://github.com/wkhtmltopdf/wkhtmltopdf/issues/4460 case when blocked access sends to about:blank which in turn generates ProtocolUnknownError by using a fake denied response instead --- src/lib/multipageloader.cc | 35 +++++++++++++++++++++++++++++++++-- 1 file changed, 33 insertions(+), 2 deletions(-) diff --git a/src/lib/multipageloader.cc b/src/lib/multipageloader.cc index 9e7c7464d..a4b66aa52 100644 --- a/src/lib/multipageloader.cc +++ b/src/lib/multipageloader.cc @@ -71,6 +71,38 @@ void MyNetworkAccessManager::allow(QString path) { allowed.insert(x); } +class networkDeniedReply: public QNetworkReply { + Q_OBJECT + +public: + networkDeniedReply(const QNetworkRequest & req) { + setRequest(req); + setOperation(QNetworkAccessManager::GetOperation); + setUrl(req.url()); + setAttribute(QNetworkRequest::HttpStatusCodeAttribute, 403); + setAttribute(QNetworkRequest::HttpReasonPhraseAttribute, "Forbidden"); + open(QIODevice::ReadOnly); + setFinished(true); + // cause signal to be called later + QTimer::singleShot(0, this, SIGNAL(readyRead())); + QTimer::singleShot(0, this, SIGNAL(finished())); + } + + virtual ~networkDeniedReply() { + } + + virtual void abort() { + } + + virtual qint64 readData(char *, qint64) { + return -1; // EOF + } + + virtual qint64 writeData(const char *, qint64) { + return -1; + } +}; + QNetworkReply * MyNetworkAccessManager::createRequest(Operation op, const QNetworkRequest & req, QIODevice * outgoingData) { emit debug(QString("Creating request: ") + req.url().toString()); @@ -101,8 +133,7 @@ QNetworkReply * MyNetworkAccessManager::createRequest(Operation op, const QNetwo if (!ok) { QNetworkRequest r2 = req; emit warning(QString("Blocked access to file %1").arg(QFileInfo(req.url().toLocalFile()).canonicalFilePath())); - r2.setUrl(QUrl("about:blank")); - return QNetworkAccessManager::createRequest(op, r2, outgoingData); + return new networkDeniedReply(req); } } QNetworkRequest r3 = req; From 5c1f227e132efc3f7f1ee36d7aee9cf5ca7ced67 Mon Sep 17 00:00:00 2001 From: Ashish Kulkarni Date: Mon, 10 Jan 2022 15:00:21 +0530 Subject: [PATCH 2/2] rename class to NetworkDeniedReply --- src/lib/multipageloader.cc | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/lib/multipageloader.cc b/src/lib/multipageloader.cc index a4b66aa52..fc77e79ff 100644 --- a/src/lib/multipageloader.cc +++ b/src/lib/multipageloader.cc @@ -71,11 +71,11 @@ void MyNetworkAccessManager::allow(QString path) { allowed.insert(x); } -class networkDeniedReply: public QNetworkReply { +class NetworkDeniedReply: public QNetworkReply { Q_OBJECT public: - networkDeniedReply(const QNetworkRequest & req) { + NetworkDeniedReply(const QNetworkRequest & req) { setRequest(req); setOperation(QNetworkAccessManager::GetOperation); setUrl(req.url()); @@ -88,7 +88,7 @@ class networkDeniedReply: public QNetworkReply { QTimer::singleShot(0, this, SIGNAL(finished())); } - virtual ~networkDeniedReply() { + virtual ~NetworkDeniedReply() { } virtual void abort() { @@ -133,7 +133,7 @@ QNetworkReply * MyNetworkAccessManager::createRequest(Operation op, const QNetwo if (!ok) { QNetworkRequest r2 = req; emit warning(QString("Blocked access to file %1").arg(QFileInfo(req.url().toLocalFile()).canonicalFilePath())); - return new networkDeniedReply(req); + return new NetworkDeniedReply(req); } } QNetworkRequest r3 = req;