From 3fd1cd3f13207743f5c9b1ae6cbf07691a9c09f4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javier=20Jaramago=20Fern=C3=A1ndez?= Date: Thu, 7 Oct 2021 21:59:40 +0200 Subject: [PATCH] Replaced non-thread safe 'strtok' function in favor of 'strtok_r' for 'IsKeepMultiplexEnabledVariables' --- lib/mysql_connection.cpp | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/lib/mysql_connection.cpp b/lib/mysql_connection.cpp index 9b267c9ed..fa4a512c6 100644 --- a/lib/mysql_connection.cpp +++ b/lib/mysql_connection.cpp @@ -2309,8 +2309,9 @@ bool MySQL_Connection::IsKeepMultiplexEnabledVariables(char *query_digest_text) std::vectorquery_digest_text_filter_select_v; char* query_digest_text_filter_select_tok = NULL; + char* save_query_digest_text_ptr = NULL; if (query_digest_text_filter_select) { - query_digest_text_filter_select_tok = strtok(query_digest_text_filter_select, ","); + query_digest_text_filter_select_tok = strtok_r(query_digest_text_filter_select, ",", &save_query_digest_text_ptr); } while(query_digest_text_filter_select_tok){ //filter "as"/space/alias,such as select @@version as a, @@version b @@ -2329,19 +2330,20 @@ bool MySQL_Connection::IsKeepMultiplexEnabledVariables(char *query_digest_text) }else{ query_digest_text_filter_select_v.push_back(query_digest_text_filter_select_tok); } - query_digest_text_filter_select_tok=strtok(NULL, ","); + query_digest_text_filter_select_tok=strtok_r(NULL, ",", &save_query_digest_text_ptr); } std::vectorkeep_multiplexing_variables_v; char* keep_multiplexing_variables_tmp; + char* save_keep_multiplexing_variables_ptr = NULL; unsigned long keep_multiplexing_variables_len=strlen(mysql_thread___keep_multiplexing_variables); keep_multiplexing_variables_tmp=(char*)malloc(keep_multiplexing_variables_len+1); memcpy(keep_multiplexing_variables_tmp, mysql_thread___keep_multiplexing_variables, keep_multiplexing_variables_len); keep_multiplexing_variables_tmp[keep_multiplexing_variables_len]='\0'; - char* keep_multiplexing_variables_tok=strtok(keep_multiplexing_variables_tmp, " ,"); + char* keep_multiplexing_variables_tok=strtok_r(keep_multiplexing_variables_tmp, " ,", &save_keep_multiplexing_variables_ptr); while (keep_multiplexing_variables_tok){ keep_multiplexing_variables_v.push_back(keep_multiplexing_variables_tok); - keep_multiplexing_variables_tok=strtok(NULL, " ,"); + keep_multiplexing_variables_tok=strtok_r(NULL, " ,", &save_keep_multiplexing_variables_ptr); } for (std::vector::iterator it=query_digest_text_filter_select_v.begin();it!=query_digest_text_filter_select_v.end();it++){