Skip to content
This repository has been archived by the owner on Jan 2, 2023. It is now read-only.

Commit

Permalink
fix #4460 case when blocked access sends to about:blank which in turn…
Browse files Browse the repository at this point in the history
… generates ProtocolUnknownError by using a fake denied response instead
  • Loading branch information
MagicalTux committed Jun 28, 2021
1 parent 45f5b3b commit 136ce55
Showing 1 changed file with 33 additions and 2 deletions.
35 changes: 33 additions & 2 deletions src/lib/multipageloader.cc
Expand Up @@ -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());

Expand Down Expand Up @@ -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;
Expand Down

0 comments on commit 136ce55

Please sign in to comment.