From d903915f938c33592b20bdba5f27a4aba01c3c8d Mon Sep 17 00:00:00 2001 From: Andrey Hristov Date: Thu, 17 Mar 2011 10:28:53 +0000 Subject: [PATCH] Fix for bug #54221 mysqli::get_warnings segfault when used in multi queries --- ext/mysqli/mysqli_warning.c | 2 +- ext/mysqli/tests/bug54221.phpt | 47 ++++++++++++++++++++++++++++++++++ 2 files changed, 48 insertions(+), 1 deletion(-) create mode 100644 ext/mysqli/tests/bug54221.phpt diff --git a/ext/mysqli/mysqli_warning.c b/ext/mysqli/mysqli_warning.c index 09fa5b3510..ee815121b3 100644 --- a/ext/mysqli/mysqli_warning.c +++ b/ext/mysqli/mysqli_warning.c @@ -197,7 +197,7 @@ PHP_METHOD(mysqli_warning, next) MYSQLI_FETCH_RESOURCE(w, MYSQLI_WARNING *, &mysqli_warning, "mysqli_warning", MYSQLI_STATUS_VALID); - if (w->next) { + if (w && w->next) { w = w->next; ((MYSQLI_RESOURCE *)(obj->ptr))->ptr = w; RETURN_TRUE; diff --git a/ext/mysqli/tests/bug54221.phpt b/ext/mysqli/tests/bug54221.phpt new file mode 100644 index 0000000000..78c9a2c40e --- /dev/null +++ b/ext/mysqli/tests/bug54221.phpt @@ -0,0 +1,47 @@ +--TEST-- +Bug #54221 mysqli::get_warnings segfault when used in multi queries +--SKIPIF-- + +--INI-- +mysqli.max_links = 1 +mysqli.allow_persistent = Off +mysqli.max_persistent = 0 +mysqli.reconnect = Off +--FILE-- +multi_query($query)) { + do { + $sth = $link->store_result(); + + if ($link->warning_count) { + $warnings = $link->get_warnings(); + if ($warnings) { + do { + echo "Warning: ".$warnings->errno.": ".$warnings->message."\n"; + } while ($warnings->next()); + } + } + } while ($link->more_results() && $link->next_result()); + } + + mysqli_close($link); + + print "done!"; +?> +--EXPECTF-- +Warning: : +Warning: 1050: Table 't54221' already exists +done! -- 2.50.1