]> granicus.if.org Git - php/commitdiff
Fix #47050 mysqli_poll() modifies improper variables
authorJohannes Schlüter <johannes@php.net>
Mon, 12 Jan 2009 14:01:47 +0000 (14:01 +0000)
committerJohannes Schlüter <johannes@php.net>
Mon, 12 Jan 2009 14:01:47 +0000 (14:01 +0000)
ext/mysqli/mysqli_fe.c
ext/mysqli/tests/bug47050.phpt [new file with mode: 0644]

index 45c5d599a9af8872228738e7d1e718d64af5fa00..808453bda311c4f7668258a7029593c74bd16257 100644 (file)
@@ -44,6 +44,13 @@ ZEND_END_ARG_INFO();
 ZEND_BEGIN_ARG_INFO(all_args_force_by_ref, 1)
 ZEND_END_ARG_INFO();
 
+ZEND_BEGIN_ARG_INFO_EX(arginfo_mysqli_poll, 0, 0, 4)
+       ZEND_ARG_ARRAY_INFO(1, read, 1)
+       ZEND_ARG_ARRAY_INFO(1, write, 1)
+       ZEND_ARG_ARRAY_INFO(1, error, 1)
+       ZEND_ARG_INFO(0, sec)
+       ZEND_ARG_INFO(0, usec)
+ZEND_END_ARG_INFO();
 
 /* {{{ mysqli_functions[]
  *
@@ -116,7 +123,7 @@ const zend_function_entry mysqli_functions[] = {
        PHP_FE(mysqli_options,                                                          NULL)
        PHP_FE(mysqli_ping,                                                                     NULL)
 #if defined(MYSQLI_USE_MYSQLND)
-       PHP_FE(mysqli_poll,                                                                     NULL)
+       PHP_FE(mysqli_poll,                                                                     arginfo_mysqli_poll)
 #endif
        PHP_FE(mysqli_prepare,                                                          NULL)
        PHP_FE(mysqli_report,                                                           NULL)
diff --git a/ext/mysqli/tests/bug47050.phpt b/ext/mysqli/tests/bug47050.phpt
new file mode 100644 (file)
index 0000000..7d936e7
--- /dev/null
@@ -0,0 +1,31 @@
+--TEST--
+Bug #47050 (mysqli_poll() modifies improper variables)
+--SKIPIF--
+<?php
+require_once('skipif.inc');
+require_once('skipifconnectfailure.inc');
+?>
+--FILE--
+<?php
+       include ("connect.inc");
+
+       $link1 = mysqli_connect($host, $user, $passwd, null, $port, $socket);
+       mysqli_select_db($link1, $db);
+
+       $link1->query("SELECT 'test'", MYSQLI_ASYNC);
+       $all_links = array($link1);
+       $links = $errors = $reject = $all_links;
+       mysqli_poll($links, $errors, $reject, 1);
+
+       echo "links: ",     sizeof($links), "\n";
+       echo "errors: ",    sizeof($errors), "\n";
+       echo "reject: ",    sizeof($reject), "\n";
+       echo "all_links: ", sizeof($all_links), "\n";
+
+       $link1->close();
+?>
+--EXPECT--
+links: 1
+errors: 0
+reject: 0
+all_links: 1