From 013595f56f7571f670deb91da5eab9515e5e719c Mon Sep 17 00:00:00 2001 From: Vladislav Vaintroub Date: Mon, 17 Jul 2017 17:04:18 +0000 Subject: [PATCH] MDEV-13332 mariabackup from 10.2.x crashes with --ftwrl-* options Fixed null pointer dereference in parsing "show full processlist" output with atoi(). Some Innodb background thread has NULL in 'Time' column, thus backup would crash with when atoi is applied to null pointer. --- extra/mariabackup/backup_mysql.cc | 4 ++-- mysql-test/suite/mariabackup/incremental_backup.test | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/extra/mariabackup/backup_mysql.cc b/extra/mariabackup/backup_mysql.cc index 5cf63ea94c1..35e838e83d3 100644 --- a/extra/mariabackup/backup_mysql.cc +++ b/extra/mariabackup/backup_mysql.cc @@ -724,7 +724,7 @@ have_queries_to_wait_for(MYSQL *connection, uint threshold) all_queries = (opt_lock_wait_query_type == QUERY_TYPE_ALL); while ((row = mysql_fetch_row(result)) != NULL) { const char *info = row[7]; - int duration = atoi(row[5]); + int duration = row[5] ? atoi(row[5]) : 0; char *id = row[0]; if (info != NULL @@ -754,7 +754,7 @@ kill_long_queries(MYSQL *connection, time_t timeout) all_queries = (opt_kill_long_query_type == QUERY_TYPE_ALL); while ((row = mysql_fetch_row(result)) != NULL) { const char *info = row[7]; - long long duration = atoll(row[5]); + long long duration = row[5]? atoll(row[5]) : 0; char *id = row[0]; if (info != NULL && diff --git a/mysql-test/suite/mariabackup/incremental_backup.test b/mysql-test/suite/mariabackup/incremental_backup.test index dde0aa3b7cb..b60b151563f 100644 --- a/mysql-test/suite/mariabackup/incremental_backup.test +++ b/mysql-test/suite/mariabackup/incremental_backup.test @@ -14,7 +14,7 @@ exec $XTRABACKUP --defaults-file=$MYSQLTEST_VARDIR/my.cnf --backup --target-dir --enable_result_log INSERT INTO t VALUES(2); SELECT * FROM t; -exec $XTRABACKUP --defaults-file=$MYSQLTEST_VARDIR/my.cnf --backup --target-dir=$incremental_dir --incremental-basedir=$basedir; +exec $XTRABACKUP --defaults-file=$MYSQLTEST_VARDIR/my.cnf --backup --ftwrl-wait-timeout=5 --ftwrl-wait-threshold=300 --ftwrl-wait-query-type=all --target-dir=$incremental_dir --incremental-basedir=$basedir; --disable_result_log echo # Prepare full backup, apply incremental one;