From 75ff7b25ab09c2310d4072016ff9145eaad63ece Mon Sep 17 00:00:00 2001 From: Xuan-Son Nguyen Date: Sun, 22 Feb 2026 22:20:41 +0100 Subject: [PATCH] fix: double free WebDAVHandler (#1093) ## Summary Ref: https://github.com/crosspoint-reader/crosspoint-reader/pull/1047#discussion_r2838439305 To reproduce: 1. Open file transfer 2. Join a network 3. Once it's connected, press (hold) back --- ### AI Usage While CrossPoint doesn't have restrictions on AI tools in contributing, please be transparent about their usage as it helps set the right context for reviewers. Did you use AI tools to help write this code? **NO** --- src/network/CrossPointWebServer.cpp | 3 ++- src/network/CrossPointWebServer.h | 3 --- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/src/network/CrossPointWebServer.cpp b/src/network/CrossPointWebServer.cpp index 4fb8af38..9464f166 100644 --- a/src/network/CrossPointWebServer.cpp +++ b/src/network/CrossPointWebServer.cpp @@ -12,6 +12,7 @@ #include "CrossPointSettings.h" #include "SettingsList.h" +#include "WebDAVHandler.h" #include "html/FilesPageHtml.generated.h" #include "html/HomePageHtml.generated.h" #include "html/SettingsPageHtml.generated.h" @@ -162,7 +163,7 @@ void CrossPointWebServer::begin() { // Collect WebDAV headers and register handler const char* davHeaders[] = {"Depth", "Destination", "Overwrite", "If", "Lock-Token", "Timeout"}; server->collectHeaders(davHeaders, 6); - server->addHandler(&davHandler); + server->addHandler(new WebDAVHandler()); // Note: WebDAVHandler will be deleted by WebServer when server is stopped LOG_DBG("WEB", "WebDAV handler initialized"); server->begin(); diff --git a/src/network/CrossPointWebServer.h b/src/network/CrossPointWebServer.h index dd895c7d..dc1fd0a6 100644 --- a/src/network/CrossPointWebServer.h +++ b/src/network/CrossPointWebServer.h @@ -9,8 +9,6 @@ #include #include -#include "WebDAVHandler.h" - // Structure to hold file information struct FileInfo { String name; @@ -73,7 +71,6 @@ class CrossPointWebServer { private: std::unique_ptr server = nullptr; std::unique_ptr wsServer = nullptr; - WebDAVHandler davHandler; bool running = false; bool apMode = false; // true when running in AP mode, false for STA mode uint16_t port = 80;