From d750ebe2400f921772a00f10ecf04c9043ca21c1 Mon Sep 17 00:00:00 2001 From: rfprod Date: Mon, 2 Nov 2026 11:45:46 +0400 Subject: [PATCH] fix(program): add defensive `null` checks and fix syntax error - [x] add `null` check for `self.requires` in `requirements()`; - [x] fix a malformed format string in `ollama_client.cpp` debug mode; - [x] add `null` checks in `CurlUtils::cleanup()` method; - [x] add debug logging for `curl` pointers during cleanup; --- CMakeLists.txt | 2 +- conanfile.py | 9 +++++---- src/ollama/ollama_client.cpp | 2 +- src/utils/curl_utils.cpp | 23 ++++++++++++++++++++--- 4 files changed, 27 insertions(+), 9 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 1dedbac..394286c 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,6 +1,6 @@ cmake_minimum_required(VERSION 3.20) -project(cpp-workspace VERSION 0.4.0 LANGUAGES CXX) +project(cpp-workspace VERSION 0.4.1 LANGUAGES CXX) set(CMAKE_CXX_STANDARD 20) set(CMAKE_CXX_STANDARD_REQUIRED ON) diff --git a/conanfile.py b/conanfile.py index 0277c30..954b50b 100644 --- a/conanfile.py +++ b/conanfile.py @@ -8,10 +8,11 @@ class AppConan(ConanFile): generators = "CMakeDeps", "CMakeToolchain" def requirements(self): - self.requires("fmt/11.2.0") - self.requires("libcurl/8.5.0") - self.requires("nlohmann_json/3.11.2") - self.requires("ncurses/6.5") + if self.requires != None: + self.requires("fmt/11.2.0") + self.requires("libcurl/8.5.0") + self.requires("nlohmann_json/3.11.2") + self.requires("ncurses/6.5") def layout(self): cmake_layout(self) diff --git a/src/ollama/ollama_client.cpp b/src/ollama/ollama_client.cpp index 70fcb9b..4b1a728 100644 --- a/src/ollama/ollama_client.cpp +++ b/src/ollama/ollama_client.cpp @@ -182,7 +182,7 @@ void OllamaClient::process_response_stream(const std::string& line) { #ifdef DEBUG if (this->ui->is_running() == false) { UserInterface::print_message_noninteractive( - std::format("\t[DEBUG] process_response_stream called with line: {}\n", << line.substr(0, 100))); + std::format("\t[DEBUG] process_response_stream called with line: {}\n", line.substr(0, 100))); } #endif diff --git a/src/utils/curl_utils.cpp b/src/utils/curl_utils.cpp index b194fe9..28838e3 100644 --- a/src/utils/curl_utils.cpp +++ b/src/utils/curl_utils.cpp @@ -67,9 +67,26 @@ void CurlUtils::initialize() { * @note Assumes cleanup operations succeed without error checking. */ void CurlUtils::cleanup() { - curl_easy_cleanup(this->curl); - curl_slist_free_all(this->headers); - this->headers = nullptr; + if (this->curl) { +#ifdef DEBUG + if (this->ui->is_running() == false) { + UserInterface::print_message_noninteractive( + std::format("\t[DEBUG] curl pointer before cleanup: {}\n", static_cast(this->curl))); + } +#endif + curl_easy_cleanup(this->curl); + this->curl = nullptr; + } + if (this->headers) { +#ifdef DEBUG + if (this->ui->is_running() == false) { + UserInterface::print_message_noninteractive( + std::format("\t[DEBUG] curl headers pointer before cleanup: {}\n", static_cast(this->headers))); + } +#endif + curl_slist_free_all(this->headers); + this->headers = nullptr; + } std::string message = "CURL cleanup is complete.\n"; if (this->ui->is_running() == false) { UserInterface::print_success_noninteractive(message);