summaryrefslogtreecommitdiff
path: root/client
diff options
context:
space:
mode:
authorunknown <reggie@mdk10.(none)>2005-03-28 13:06:43 -0600
committerunknown <reggie@mdk10.(none)>2005-03-28 13:06:43 -0600
commit633207b549cfe95ad12604894324c831ff2e0f22 (patch)
treed13dea3db20115899b600709f64268fbf802a64c /client
parentb9c6c482685bdf164b59cacdfe6bf55feeda38a4 (diff)
downloadmariadb-git-633207b549cfe95ad12604894324c831ff2e0f22.tar.gz
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 client/mysqldump.c: Add code to get_actual_tablename() to guard against SHOW TABLES LIKE not returning any rows
Diffstat (limited to 'client')
-rw-r--r--client/mysqldump.c31
1 files changed, 21 insertions, 10 deletions
diff --git a/client/mysqldump.c b/client/mysqldump.c
index 0ff88bcbc73..2a9029244d4 100644
--- a/client/mysqldump.c
+++ b/client/mysqldump.c
@@ -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;
}