From: Andrey Hristov Date: Thu, 17 Mar 2011 10:28:53 +0000 (+0000) Subject: Fix for bug #54221 mysqli::get_warnings segfault when used in multi queries X-Git-Tag: php-5.3.7RC1~241 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=56cdee2def91146b6b65d5556dab97e8cd775049;p=php Fix for bug #54221 mysqli::get_warnings segfault when used in multi queries --- 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!