From 5864313741725c754dd7c7d450988a4a1f80db61 Mon Sep 17 00:00:00 2001 From: mitans02 Date: Sun, 11 Nov 2012 00:07:07 +0900 Subject: [PATCH] fixed changing configuration cause crash with MySQL-5.1 --- src/audit_plugin.cc | 32 ++++++++++++++++++++++++++++---- 1 file changed, 28 insertions(+), 4 deletions(-) diff --git a/src/audit_plugin.cc b/src/audit_plugin.cc index 1ed932a..f4b2128 100755 --- a/src/audit_plugin.cc +++ b/src/audit_plugin.cc @@ -532,6 +532,11 @@ static const ThdOffsets thd_offsets_arr[] = #endif +//See here: http://bugs.mysql.com/bug.php?id=56652 +#if (MYSQL_VERSION_ID < 50519) || (50600 <= MYSQL_VERSION_ID && MYSQL_VERSION_ID < 50604) +# define AUDIT_NEED_FREE_STRING_MEMALLOC_PLUGIN_VAR +#endif + static const char * log_prefix = AUDIT_LOG_PREFIX; //possible audit handlers @@ -1687,7 +1692,14 @@ static void delay_cmds_string_update(THD *thd, const void *save) { num_delay_cmds = string_to_array(save, delay_cmds_array, SQLCOM_END + 2, MAX_COMMAND_CHAR_NUMBERS); - delay_cmds_string = *static_cast (save); + +#ifdef AUDIT_NEED_FREE_STRING_MEMALLOC_PLUGIN_VAR + my_free(delay_cmds_string, MYF(0)); + delay_cmds_string = my_strdup(*static_cast(save), MYF(MY_WME)); +#else + delay_cmds_string = *static_cast (save); +#endif + sql_print_information("%s Set num_delay_cmds: %d, delay cmds: %s", log_prefix, num_delay_cmds, delay_cmds_string); } @@ -1696,7 +1708,14 @@ static void record_cmds_string_update(THD *thd, const void *save) { num_record_cmds = string_to_array(save, record_cmds_array, SQLCOM_END + 2, MAX_COMMAND_CHAR_NUMBERS); - record_cmds_string = *static_cast (save); + +#ifdef AUDIT_NEED_FREE_STRING_MEMALLOC_PLUGIN_VAR + my_free(record_cmds_string, MYF(0)); + record_cmds_string = my_strdup(*static_cast(save), MYF(MY_WME)); +#else + record_cmds_string = *static_cast (save); +#endif + sql_print_information("%s Set num_record_cmds: %d record cmds: %s", log_prefix, num_record_cmds, record_cmds_string); } @@ -1704,8 +1723,13 @@ static void record_objs_string_update(THD *thd, struct st_mysql_sys_var *var, void *tgt, const void *save) { - record_objs_string = *static_cast (save); - setup_record_objs_array(); +#ifdef AUDIT_NEED_FREE_STRING_MEMALLOC_PLUGIN_VAR + my_free(record_objs_string, MYF(0)); + record_objs_string = my_strdup(*static_cast(save), MYF(MY_WME)); +#else + record_objs_string = *static_cast (save); +#endif + setup_record_objs_array(); } //setup sysvars which update directly the relevant plugins