From acb4c57db337755fbaaea1b0f456732cfe3ddf9c Mon Sep 17 00:00:00 2001 From: Rene Cannao Date: Mon, 12 Jan 2026 01:20:31 +0000 Subject: [PATCH] Fix case sensitivity issues in MySQL_Tool_Handler::execute_query MySQL returns column names in uppercase for information_schema tables, but the code was expecting lowercase column names. This caused crashes when accessing JSON keys that didn't exist. Changes: 1. Convert all column names to lowercase in execute_query() 2. Store lowercase column names in a vector for efficient access 3. Use lowercase column names as keys in JSON row objects This ensures consistent column name casing across all queries, preventing JSON access errors for information_schema columns. Also includes the previous use-after-free fix. --- lib/MySQL_Tool_Handler.cpp | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/lib/MySQL_Tool_Handler.cpp b/lib/MySQL_Tool_Handler.cpp index f26cadb98..c63614b8c 100644 --- a/lib/MySQL_Tool_Handler.cpp +++ b/lib/MySQL_Tool_Handler.cpp @@ -281,11 +281,16 @@ std::string MySQL_Tool_Handler::execute_query(const std::string& query) { return result.dump(); } - // Get column names + // Get column names (convert to lowercase for consistency) json columns = json::array(); + std::vector lowercase_columns; MYSQL_FIELD* field; while ((field = mysql_fetch_field(res))) { - columns.push_back(field->name); + std::string col_name = field->name; + // Convert to lowercase + std::transform(col_name.begin(), col_name.end(), col_name.begin(), ::tolower); + columns.push_back(col_name); + lowercase_columns.push_back(col_name); } // Get rows @@ -295,8 +300,7 @@ std::string MySQL_Tool_Handler::execute_query(const std::string& query) { while ((row = mysql_fetch_row(res))) { json json_row = json::object(); for (unsigned int i = 0; i < num_fields; i++) { - std::string col_name = columns[i].get(); - json_row[col_name] = row[i] ? row[i] : nullptr; + json_row[lowercase_columns[i]] = row[i] ? row[i] : nullptr; } rows.push_back(json_row); }