aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTobias Fella <fella@posteo.de>2021-09-10 17:55:20 +0200
committerTobias Fella <fella@posteo.de>2021-09-10 21:41:25 +0200
commit8dfa505066a03cc8450527699634fda71cbd8915 (patch)
tree3116beac2c4423599ed9fd362146f0f998acb000
parent3b383a6dcb75531ca7efcaa4afa28b92dbe15e3e (diff)
downloadlibquotient-8dfa505066a03cc8450527699634fda71cbd8915.tar.gz
libquotient-8dfa505066a03cc8450527699634fda71cbd8915.zip
Return a failed MxcReply on invalid requests
-rw-r--r--lib/mxcreply.cpp15
-rw-r--r--lib/mxcreply.h1
-rw-r--r--lib/networkaccessmanager.cpp8
3 files changed, 20 insertions, 4 deletions
diff --git a/lib/mxcreply.cpp b/lib/mxcreply.cpp
index f389ac85..7819367e 100644
--- a/lib/mxcreply.cpp
+++ b/lib/mxcreply.cpp
@@ -4,6 +4,7 @@
#include "mxcreply.h"
#include <QtCore/QBuffer>
+#include <QtCore/QTimer>
#include "connection.h"
#include "room.h"
#include "networkaccessmanager.h"
@@ -40,6 +41,20 @@ MxcReply::MxcReply(QNetworkReply* reply, Room* room, const QString &eventId)
});
}
+MxcReply::MxcReply()
+{
+ QTimer::singleShot(0, this, [this](){
+ setError(QNetworkReply::ProtocolInvalidOperationError, QStringLiteral("Invalid Request"));
+ setFinished(true);
+#if QT_VERSION >= QT_VERSION_CHECK(5, 15, 0)
+ Q_EMIT errorOccurred(QNetworkReply::ProtocolInvalidOperationError);
+#else
+ Q_EMIT error(QNetworkReply::ProtocolInvalidOperationError);
+#endif
+ Q_EMIT finished();
+ });
+}
+
bool MxcReply::isSequential() const
{
return true;
diff --git a/lib/mxcreply.h b/lib/mxcreply.h
index 26dea2d0..ac3ac4f4 100644
--- a/lib/mxcreply.h
+++ b/lib/mxcreply.h
@@ -14,6 +14,7 @@ class MxcReply : public QNetworkReply
public:
MxcReply(QNetworkReply* reply, Room* room, const QString &eventId);
MxcReply(QNetworkReply* reply);
+ MxcReply();
bool isSequential() const override;
diff --git a/lib/networkaccessmanager.cpp b/lib/networkaccessmanager.cpp
index 710ade4e..f37e26b6 100644
--- a/lib/networkaccessmanager.cpp
+++ b/lib/networkaccessmanager.cpp
@@ -73,12 +73,12 @@ QNetworkReply* NetworkAccessManager::createRequest(
auto connection = AccountRegistry::instance().get(fragmentParts[0]);
if(!connection) {
qWarning() << "Connection not found";
- return nullptr;
+ return new MxcReply();
}
auto room = connection->room(fragmentParts[1]);
if(!room) {
qWarning() << "Room not found";
- return nullptr;
+ return new MxcReply();
}
QNetworkRequest r(request);
r.setUrl(QUrl(QStringLiteral("%1/_matrix/media/r0/download/%2").arg(connection->homeserver().toString(), mediaId)));
@@ -88,7 +88,7 @@ QNetworkReply* NetworkAccessManager::createRequest(
auto connection = AccountRegistry::instance().get(fragment);
if(!connection) {
qWarning() << "Connection not found";
- return nullptr;
+ return new MxcReply();
}
QNetworkRequest r(request);
r.setUrl(QUrl(QStringLiteral("%1/_matrix/media/r0/download/%2").arg(connection->homeserver().toString(), mediaId)));
@@ -96,7 +96,7 @@ QNetworkReply* NetworkAccessManager::createRequest(
return new MxcReply(reply);
} else {
qWarning() << "Invalid request";
- return nullptr;
+ return new MxcReply();
}
}
auto reply = QNetworkAccessManager::createRequest(op, request, outgoingData);