mysqldump get_view_structure does not free MYSQL_RES in one error path

Bug #1588845 reported by Laurynas Biveinis on 2016-06-03
6
This bug affects 1 person
Affects Status Importance Assigned to Milestone
MySQL Server
Unknown
Unknown
Percona Server moved to https://jira.percona.com/projects/PS
Status tracked in 5.7
5.5
Fix Released
Low
Laurynas Biveinis
5.6
Fix Released
Low
Laurynas Biveinis
5.7
Fix Released
Low
Laurynas Biveinis

Bug Description

Copy of http://bugs.mysql.com/bug.php?id=81714:

[3 Jun 14:14] Laurynas Biveinis
Description:
A minor code review bug, credit to my colleague Yura Sorokin:

static my_bool get_view_structure(char *table, char* db)
{
  MYSQL_RES *table_res;
...
  if (mysql_query_with_error_report(mysql, &table_res, query))
...
  if (path)
  {
    if (!(sql_file= open_sql_file_for_table(table, O_WRONLY)))
      DBUG_RETURN(1);

Thus, mysql_free_result is not called here.

How to repeat:
Code review

Suggested fix:
For 5.7, call mysql_free_result there.

For lower versions, backport [1], and call mysql_free_result there.

[1]:

commit 353dbcee4a27b8cfbbd127a28a043bdda764dcf1
Author: Jon Olav Hauglid <email address hidden>
Date: Fri Jun 12 14:55:35 2015 +0200

    Bug#21246627: ASAN: MEMORY LEAK IN PROCESS_SET_GTID_PURGED()
    Bug#21250584: ASAN: MEMORY LEAK IN MYSQLDUMP

    Fix three different memory leaks in mysqldump:
    1) Remember to call dynstr_free() on DYNAMIC_STRING.
    2) Remember to call mysql_free_result() on MYSQL_RES.
    3) Remember to call my_free() on string allocated by alloc_query_str().

This report contains Public information  Edit
Everyone can see this information.

Other bug subscribers

Remote bug watches

Bug watches keep track of this bug in other bug trackers.