summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrey Hristov <andrey@php.net>2011-08-05 13:39:30 +0000
committerAndrey Hristov <andrey@php.net>2011-08-05 13:39:30 +0000
commit8a929d8942de7d2661d028bdd4b4538926cbf831 (patch)
treed4de242bfe3351d455c07e4b7bea503edb3629fc
parent32319a142f671015d567358f898b3a841d21cd3d (diff)
downloadphp-git-8a929d8942de7d2661d028bdd4b4538926cbf831.tar.gz
Fix for bug #55283 SSL options set by mysqli_ssl_set ignored for MySQLi persistent connections
-rw-r--r--NEWS5
-rw-r--r--ext/mysqli/mysqli_nonapi.c10
-rw-r--r--ext/mysqli/tests/bug55283.phpt55
3 files changed, 65 insertions, 5 deletions
diff --git a/NEWS b/NEWS
index d484fdfe2b..946e608349 100644
--- a/NEWS
+++ b/NEWS
@@ -1,7 +1,10 @@
PHP NEWS
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
?? ??? ????, PHP 5.3.7
-
+- mysqli
+ . Fixed bug #55238 (SSL options set by mysqli_ssl_set ignored for MySQLi
+ persistent connections). (Andrey)
+
28 Jul 2011, PHP 5.3.7 RC4
- Improved core functions:
. Updated crypt_blowfish to 1.2. ((CVE-2011-2483) (Solar Designer)
diff --git a/ext/mysqli/mysqli_nonapi.c b/ext/mysqli/mysqli_nonapi.c
index 6de657c279..4c281c2761 100644
--- a/ext/mysqli/mysqli_nonapi.c
+++ b/ext/mysqli/mysqli_nonapi.c
@@ -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
index 0000000000..0611c773cf
--- /dev/null
+++ b/ext/mysqli/tests/bug55283.phpt
@@ -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