]> granicus.if.org Git - php/commitdiff
Fix for bug #55283 SSL options set by mysqli_ssl_set ignored for MySQLi persistent...
authorAndrey Hristov <andrey@php.net>
Fri, 5 Aug 2011 13:39:30 +0000 (13:39 +0000)
committerAndrey Hristov <andrey@php.net>
Fri, 5 Aug 2011 13:39:30 +0000 (13:39 +0000)
ext/mysqli/mysqli_nonapi.c
ext/mysqli/tests/bug55283.phpt [new file with mode: 0644]

index 8dbaed2bffefdc923dea3a082daf3483c2c5ef90..2844c4df1b0c9e822fccea96d1101752941adb39 100644 (file)
@@ -141,10 +141,12 @@ void mysqli_common_connect(INTERNAL_FUNCTION_PARAMETERS, zend_bool is_real_conne
                hostname = MyG(default_host);
        }
 
-       if (mysql->mysql && mysqli_resource && (mysqli_resource->status > MYSQLI_STATUS_INITIALIZED || (strlen(SAFE_STR(hostname)) > 2 && !strncasecmp(hostname, "p:", 2)))) {
-                /* already connected, we should close the connection */
-                php_mysqli_close(mysql, MYSQLI_CLOSE_IMPLICIT, mysqli_resource->status TSRMLS_CC);
-        }
+       if (mysql->mysql && mysqli_resource &&
+               (mysqli_resource->status > MYSQLI_STATUS_INITIALIZED))
+       {
+               /* already connected, we should close the connection */
+               php_mysqli_close(mysql, MYSQLI_CLOSE_IMPLICIT, mysqli_resource->status TSRMLS_CC);
+       }
 
        if (strlen(SAFE_STR(hostname)) > 2 && !strncasecmp(hostname, "p:", 2)) {
                hostname += 2;
diff --git a/ext/mysqli/tests/bug55283.phpt b/ext/mysqli/tests/bug55283.phpt
new file mode 100644 (file)
index 0000000..0611c77
--- /dev/null
@@ -0,0 +1,55 @@
+--TEST--
+Bug #55283 (SSL options set by mysqli_ssl_set ignored for MySQLi persistent connections)
+--SKIPIF--
+<?php
+require_once('skipif.inc');
+require_once('skipifconnectfailure.inc');
+$link = mysqli_init();
+mysqli_ssl_set($link, null, null, null, null, "RC4-MD5");
+if (my_mysqli_real_connect($link, $host, $user, $passwd, $db, $port, null, $flags)) {
+       $res = $link->query("SHOW STATUS LIKE 'Ssl_cipher'");
+       $row = $res->fetch_row();
+       if ($row[1] === "") {
+               die('skip Server started without SSL support'); 
+       }
+}
+?>
+--FILE--
+<?php
+       include "connect.inc";
+       $db1 = new mysqli();
+
+
+       $flags = MYSQLI_CLIENT_SSL;
+       
+       $link = mysqli_init();
+       mysqli_ssl_set($link, null, null, null, null, "RC4-MD5");
+       if (my_mysqli_real_connect($link, 'p:' . $host, $user, $passwd, $db, $port, null, $flags)) {
+               $r = $link->query("SHOW STATUS LIKE 'Ssl_cipher'");
+               var_dump($r->fetch_row());
+       }
+
+       /* non-persistent connection */
+       $link2 = mysqli_init();
+       mysqli_ssl_set($link2, null, null, null, null, "RC4-MD5");
+       if (my_mysqli_real_connect($link2, $host, $user, $passwd, $db, $port, null, $flags)) {
+               $r2 = $link2->query("SHOW STATUS LIKE 'Ssl_cipher'");
+               var_dump($r2->fetch_row());
+       }
+
+       echo "done\n";
+?>
+--EXPECTF--
+array(2) {
+  [0]=>
+  string(10) "Ssl_cipher"
+  [1]=>
+  string(7) "RC4-MD5"
+}
+array(2) {
+  [0]=>
+  string(10) "Ssl_cipher"
+  [1]=>
+  string(7) "RC4-MD5"
+}
+done
\ No newline at end of file