From cf97924b98c0a8785cc0301f5fd4f62edf85e195 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=88=9A=28noham=29=C2=B2?= <100566912+NohamR@users.noreply.github.com> Date: Thu, 7 May 2026 19:17:12 +0200 Subject: [PATCH] Refactor hook.cpp: cache URLs & improve safety --- paho-mqtt3as-proxy/hook.cpp | 46 +++++++++++++------------------------ 1 file changed, 16 insertions(+), 30 deletions(-) diff --git a/paho-mqtt3as-proxy/hook.cpp b/paho-mqtt3as-proxy/hook.cpp index f050a63..b7d7f3a 100644 --- a/paho-mqtt3as-proxy/hook.cpp +++ b/paho-mqtt3as-proxy/hook.cpp @@ -142,69 +142,55 @@ QNetworkReply* __fastcall hookedCreateRequest( QNetworkAccessManager* self, QNetworkAccessManager::Operation op, const QNetworkRequest& req, - QIODevice* outgoingData -) + QIODevice* outgoingData) { - const QString host = req.url().host(); + const QUrl url = req.url(); + const QString host = url.host(); + if (shouldPatchURL(host)) { QNetworkRequest newReq(req); - QUrl newUrl = req.url(); + QUrl newUrl = url; newUrl.setHost(QString::fromStdString(gConfiguredHost)); newUrl.setPort(gConfiguredPort); newReq.setUrl(newUrl); - Log("[HTTP PATCHED] " + host.toStdString() + " -> " + newUrl.toString().toStdString()); - - if (originalCreateRequest) { - return originalCreateRequest(self, op, newReq, outgoingData); - } - return nullptr; + return originalCreateRequest ? originalCreateRequest(self, op, newReq, outgoingData) : nullptr; } - - if (originalCreateRequest) { - return originalCreateRequest(self, op, req, outgoingData); - } - return nullptr; + return originalCreateRequest ? originalCreateRequest(self, op, req, outgoingData) : nullptr; } void __fastcall hookedWebSocketOpen( QWebSocket* self, - const QNetworkRequest& req -) + const QNetworkRequest& req) { - if (!originalWebSocketOpen) { - return; - } + if (!originalWebSocketOpen) return; + + const QUrl url = req.url(); + const QString host = url.host(); - const QString host = req.url().host(); if (shouldPatchURL(host)) { - QUrl newUrl = req.url(); + QUrl newUrl = url; newUrl.setHost(QString::fromStdString(gConfiguredHost)); newUrl.setPort(gConfiguredPort); - QNetworkRequest newReq(req); newReq.setUrl(newUrl); - Log("[WS PATCHED] " + host.toStdString() + " -> " + newUrl.toString().toStdString()); - originalWebSocketOpen(self, newReq); return; } - originalWebSocketOpen(self, req); } + void* ResolveExport(HMODULE module, const char* symbol) { + if (!symbol) return nullptr; void* addr = (void*)GetProcAddress(module, symbol); - if (!addr) { - Log("[ERROR] Failed to resolve symbol"); - Log(symbol); + Log(std::string("[ERROR] Failed to resolve symbol: ") + symbol); } - return addr; }