Description:
String::c_ptr_safe() isn't (safe that is)
40 bytes in 1 blocks are definitely lost in loss record 5 of 6
at 0x6EAFB6B: malloc (vg_replace_malloc.c:299)
by 0x3A2BCAF: my_raw_malloc(unsigned long, int) (my_malloc.cc:199)
by 0x3A2B907: my_malloc(unsigned int, unsigned long, int) (my_malloc.cc:81)
by 0x28F32B0: String::mem_realloc(unsigned long, bool) (sql_string.cc:117)
by 0x26667D0: String::c_ptr_safe() (sql_string.h:261)
by 0x28915A8: Sys_var_gtid_purged::do_check(THD*, set_var*) (sys_vars.h:2220)
by 0x26B4B53: sys_var::check(THD*, set_var*) (set_var.cc:302)
by 0x26B6972: set_var::check(THD*) (set_var.cc:929)
by 0x26B60D4: sql_set_variables(THD*, List<set_var_base>*, bool) (set_var.cc:765)
by 0x2687500: Persisted_variables_cache::set_persist_options(bool) (persisted_variable.cc:700)
by 0x2629248: mysqld_main(int, char**) (mysqld.cc:6178)
by 0x2619696: main (main.cc:30)
1 bytes in 1 blocks are still reachable in loss record 1 of 9
at 0x6EAFB6B: malloc (vg_replace_malloc.c:299)
by 0x6293554: tls_get_addr_tail (in /usr/lib64/ld-2.26.so)
by 0x6299AF7: __tls_get_addr (in /usr/lib64/ld-2.26.so)
by 0x25A638DF: semi_sync_master_plugin_init(void*) (semisync_master_plugin.cc:502)
by 0x27AC350: plugin_initialize(st_plugin_int*) (sql_plugin.cc:1210)
by 0x27AC93D: plugin_init_initialize_and_reap() (sql_plugin.cc:1350)
by 0x27AD385: plugin_register_dynamic_and_init_all(int*, char**, int) (sql_plugin.cc:1577)
by 0x2624F51: init_server_components() (mysqld.cc:4965)
by 0x262818D: mysqld_main(int, char**) (mysqld.cc:5810)
by 0x2619696: main (main.cc:30)
How to repeat:
./mtr --mem --valgrind binlog_nogtid.binlog_persist_only_variables
ASAN also reports a leak.
Suggested fix:
Don't use c_ptr_safe, use c_ptr()