mirror of
https://github.com/MariaDB/server.git
synced 2025-07-30 16:24:05 +03:00
Bug #9175 seg fault on 'mysqldump --single-transaction --tab mysql nonexistent'
My code in get_actual_tablename was not checking to make sure SHOW TABLES LIKE % was returning rows. Now I check that the resultset is not null and has at least 1 row before I process the table. mysqldump.c: Add code to get_actual_tablename() to guard against SHOW TABLES LIKE not returning any rows
This commit is contained in:
@ -2113,10 +2113,10 @@ static int dump_all_tables_in_db(char *database)
|
||||
different case (e.g. T1 vs t1)
|
||||
|
||||
RETURN
|
||||
void
|
||||
int - 0 if a tablename was retrieved. 1 if not
|
||||
*/
|
||||
|
||||
static void get_actual_table_name(const char *old_table_name,
|
||||
static int get_actual_table_name(const char *old_table_name,
|
||||
char *new_table_name,
|
||||
int buf_size)
|
||||
{
|
||||
@ -2137,9 +2137,19 @@ static void get_actual_table_name(const char *old_table_name,
|
||||
}
|
||||
|
||||
tableRes= mysql_store_result( sock );
|
||||
row= mysql_fetch_row( tableRes );
|
||||
strmake(new_table_name, row[0], buf_size-1);
|
||||
mysql_free_result(tableRes);
|
||||
if (tableRes != NULL)
|
||||
{
|
||||
my_ulonglong numRows = mysql_num_rows(tableRes);
|
||||
if (numRows > 0)
|
||||
{
|
||||
row= mysql_fetch_row( tableRes );
|
||||
strmake(new_table_name, row[0], buf_size-1);
|
||||
return 0;
|
||||
}
|
||||
mysql_free_result(tableRes);
|
||||
return 1;
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
||||
@ -2179,11 +2189,12 @@ static int dump_selected_tables(char *db, char **table_names, int tables)
|
||||
char new_table_name[NAME_LEN];
|
||||
|
||||
/* the table name passed on commandline may be wrong case */
|
||||
get_actual_table_name( *table_names, new_table_name, sizeof(new_table_name) );
|
||||
|
||||
numrows = getTableStructure(new_table_name, db);
|
||||
if (!dFlag && numrows > 0)
|
||||
dumpTable(numrows, new_table_name);
|
||||
if (!get_actual_table_name( *table_names, new_table_name, sizeof(new_table_name) ))
|
||||
{
|
||||
numrows = getTableStructure(new_table_name, db);
|
||||
if (!dFlag && numrows > 0)
|
||||
dumpTable(numrows, new_table_name);
|
||||
}
|
||||
my_free(order_by, MYF(MY_ALLOW_ZERO_PTR));
|
||||
order_by= 0;
|
||||
}
|
||||
|
Reference in New Issue
Block a user