From d4f75481f6c78da41ddc50742ffb3b89cb572d24 Mon Sep 17 00:00:00 2001 From: Georg Richter Date: Thu, 5 Mar 2020 09:50:12 +0100 Subject: [PATCH] Fix for CONC-458: Fixed crash in mysql_get_timeout and mysql_get_timeout_ms functions, which happened when no asynchronous context was set before. --- libmariadb/mariadb_lib.c | 9 +++++++-- unittest/libmariadb/misc.c | 9 +++++++++ 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/libmariadb/mariadb_lib.c b/libmariadb/mariadb_lib.c index b1f80a75..896f87de 100644 --- a/libmariadb/mariadb_lib.c +++ b/libmariadb/mariadb_lib.c @@ -1751,7 +1751,10 @@ void ma_invalidate_stmts(MYSQL *mysql, const char *function_name) unsigned int STDCALL mysql_get_timeout_value(const MYSQL *mysql) { - unsigned int timeout= mysql->options.extension->async_context->timeout_value; + unsigned int timeout= 0; + + if (mysql->options.extension && mysql->options.extension->async_context) + timeout= mysql->options.extension->async_context->timeout_value; /* Avoid overflow. */ if (timeout > UINT_MAX - 999) return (timeout - 1)/1000 + 1; @@ -1763,7 +1766,9 @@ mysql_get_timeout_value(const MYSQL *mysql) unsigned int STDCALL mysql_get_timeout_value_ms(const MYSQL *mysql) { - return mysql->options.extension->async_context->timeout_value; + if (mysql->options.extension && mysql->options.extension->async_context) + return mysql->options.extension->async_context->timeout_value; + return 0; } /************************************************************************** diff --git a/unittest/libmariadb/misc.c b/unittest/libmariadb/misc.c index fcd03b92..dd3e451e 100644 --- a/unittest/libmariadb/misc.c +++ b/unittest/libmariadb/misc.c @@ -1435,8 +1435,17 @@ static int test_conc457(MYSQL *mysql) return OK; } +static int test_conc458(MYSQL *my __attribute__((unused))) +{ + MYSQL *mysql= mysql_init(NULL); + FAIL_IF(mysql_get_timeout_value(mysql) != 0, "expected timeout 0"); + mysql_close(mysql); + return OK; +} + struct my_tests_st my_tests[] = { + {"test_conc458", test_conc458, TEST_CONNECTION_NONE, 0, NULL, NULL}, {"test_conc457", test_conc457, TEST_CONNECTION_DEFAULT, 0, NULL, NULL}, {"test_conc384", test_conc384, TEST_CONNECTION_NONE, 0, NULL, NULL}, #ifndef _WIN32