]> granicus.if.org Git - php/commitdiff
Fix tests that fail when the MySQL's socket file is not /tmp/mysql.sock
authorAndrey Hristov <andrey@php.net>
Fri, 26 Mar 2010 16:58:25 +0000 (16:58 +0000)
committerAndrey Hristov <andrey@php.net>
Fri, 26 Mar 2010 16:58:25 +0000 (16:58 +0000)
as it is in when compiled from source and the default for mysqlnd.
SuSE for example uses /var/run/mysql/mysql.sock . Also, sql.safe_mode
(ext/mysql and ingres) needs the socket.
Fix possible crashes in mysqlnd. When packets are shorter, functions should
return error.

ext/mysql/tests/connect.inc
ext/mysqli/tests/connect.inc
ext/mysqli/tests/mysqli_poll_kill.phpt
ext/mysqlnd/mysqlnd.c
ext/mysqlnd/mysqlnd_result.c
ext/mysqlnd/mysqlnd_wireprotocol.c

index b5cc03ecb4751d7665bde799f916466a998b8ac4..97fed421465b8f41c15e2e7c21f0ecaf519b07ce 100755 (executable)
@@ -69,7 +69,9 @@ $engine       = getenv("MYSQL_TEST_ENGINE")   ? getenv("MYSQL_TEST_ENGINE")   : "MyISAM";
 $socket        = getenv("MYSQL_TEST_SOCKET")   ? getenv("MYSQL_TEST_SOCKET")   : null;
 $skip_on_connect_failure  = getenv("MYSQL_TEST_SKIP_CONNECT_FAILURE") ? getenv("MYSQL_TEST_SKIP_CONNECT_FAILURE") : true;
 $connect_flags = getenv("MYSQL_TEST_CONNECT_FLAGS") ? (int)getenv("MYSQL_TEST_CONNECT_FLAGS") : 0;
-
+if ($socket) {
+       ini_set('mysql.default_user', $socket);
+}
 /* Development setting: test experimal features and/or feature requests that never worked before? */
 $TEST_EXPERIMENTAL = (in_array(getenv("MYSQL_TEST_EXPERIMENTAL"), array(0, 1))) ?
        ((1 == getenv("MYSQL_TEST_EXPERIMENTAL")) ? true : false) :
index 48ba893cccafcc37dc5f5d07ae310b42426faf6e..92caa25e934fb760dbf87102936fd1be80799b2f 100644 (file)
@@ -17,7 +17,9 @@
        $socket    = getenv("MYSQL_TEST_SOCKET")   ? getenv("MYSQL_TEST_SOCKET") : null;
        $skip_on_connect_failure  = getenv("MYSQL_TEST_SKIP_CONNECT_FAILURE") ? getenv("MYSQL_TEST_SKIP_CONNECT_FAILURE") : true;
        $connect_flags = getenv("MYSQL_TEST_CONNECT_FLAGS") ? (int)getenv("MYSQL_TEST_CONNECT_FLAGS") : 0;
-
+       if ($socket) {
+               ini_set('mysqli.default_socket', $socket);
+       }
        /* Development setting: test experimal features and/or feature requests that never worked before? */
        $TEST_EXPERIMENTAL = (in_array(getenv("MYSQL_TEST_EXPERIMENTAL"), array(0, 1))) ?
                                ((1 == getenv("MYSQL_TEST_EXPERIMENTAL")) ? true : false) :
index 73382b7301242d8ec939702bb633b29234f1fbc8..fa70f68cdb8f5d974a4c0d10c2b40c659ce7798b 100644 (file)
@@ -183,7 +183,7 @@ array(1) {
   %unicode|string%(1) "1"
 }
 
-Warning: mysqli_reap_async_query(): GREET %s
+Warning: mysqli_reap_async_query(): RSET_HEADER %
 
 Warning: mysqli_reap_async_query(): MySQL server has gone away in %s on line %d
 [014] 2014/%s
index 3a31a1d7e6022f34c7ebb3c7eefad61aae452e14..4f89b8c57e0e50727247b3eb5b9fae8cbe1550db 100644 (file)
@@ -516,20 +516,24 @@ MYSQLND_METHOD(mysqlnd_conn, connect)(MYSQLND *conn,
        if (!host || !host[0]) {
                host = "localhost";
        }
-       if (!user || !user[0]) {
-               user = php_get_current_user();
+       if (!user) {
+               DBG_INF_FMT("no user given, using empty string");
+               user = "";
        }
        if (!passwd) {
+               DBG_INF_FMT("no password given, using empty string");
                passwd = "";
                passwd_len = 0;
        }
        if (!db) {
+               DBG_INF_FMT("no db given, using empty string");
                db = "";
                db_len = 0;
        }
        host_len = strlen(host);
 #ifndef PHP_WIN32
        if (host_len == sizeof("localhost") - 1 && !strncasecmp(host, "localhost", host_len)) {
+               DBG_INF_FMT("socket=%s", socket? socket:"n/a");
                if (!socket) {
                        socket = "/tmp/mysql.sock";
                }
index ac3761868b2562a4678150e47944460660a20a2d..224b590d546996236c1e67cb49576b783270913a 100644 (file)
@@ -470,7 +470,7 @@ mysqlnd_query_read_result_set_header(MYSQLND *conn, MYSQLND_STMT * s TSRMLS_DC)
 
                                if (FAIL == (ret = result->m.read_result_metadata(result, conn TSRMLS_CC))) {
                                        /* For PS, we leave them in Prepared state */
-                                       if (!stmt) {
+                                       if (!stmt && conn->current_result) {
                                                mnd_efree(conn->current_result);
                                                conn->current_result = NULL;
                                        }
index ea41a9a137797e254b8d3864819dba83bdf7aa64..09666835654c63edad4affd795452daaf6e6793f 100644 (file)
@@ -353,6 +353,7 @@ php_mysqlnd_greet_read(void *_packet, MYSQLND *conn TSRMLS_DC)
                DBG_ERR_FMT("GREET packet %d bytes shorter than expected", p - begin - packet->header.size);
                php_error_docref(NULL TSRMLS_CC, E_WARNING, "GREET packet "MYSQLND_SZ_T_SPEC" bytes shorter than expected",
                                                 p - begin - packet->header.size);
+               DBG_RETURN(FAIL);
        }
 
        DBG_RETURN(PASS);
@@ -554,6 +555,7 @@ php_mysqlnd_ok_read(void *_packet, MYSQLND *conn TSRMLS_DC)
                DBG_ERR_FMT("OK packet %d bytes shorter than expected", p - begin - packet->header.size);
                php_error_docref(NULL TSRMLS_CC, E_WARNING, "OK packet "MYSQLND_SZ_T_SPEC" bytes shorter than expected",
                                                 p - begin - packet->header.size);
+               DBG_RETURN(FAIL);
        }
 
        DBG_RETURN(PASS);
@@ -628,6 +630,7 @@ php_mysqlnd_eof_read(void *_packet, MYSQLND *conn TSRMLS_DC)
                DBG_ERR_FMT("EOF packet %d bytes shorter than expected", p - begin - packet->header.size);
                php_error_docref(NULL TSRMLS_CC, E_WARNING, "EOF packet "MYSQLND_SZ_T_SPEC" bytes shorter than expected",
                                                 p - begin - packet->header.size);
+               DBG_RETURN(FAIL);
        }
 
        DBG_INF_FMT("EOF packet: fields=%d status=%d warnings=%d",
@@ -788,8 +791,9 @@ php_mysqlnd_rset_header_read(void *_packet, MYSQLND *conn TSRMLS_DC)
        }
        if (p - begin > packet->header.size) {
                DBG_ERR_FMT("RSET_HEADER packet %d bytes shorter than expected", p - begin - packet->header.size);
-               php_error_docref(NULL TSRMLS_CC, E_WARNING, "GREET packet "MYSQLND_SZ_T_SPEC" bytes shorter than expected",
+               php_error_docref(NULL TSRMLS_CC, E_WARNING, "RSET_HEADER packet "MYSQLND_SZ_T_SPEC" bytes shorter than expected",
                                                 p - begin - packet->header.size);
+               DBG_RETURN(FAIL);
        }
 
        DBG_RETURN(PASS);
@@ -941,6 +945,7 @@ php_mysqlnd_rset_field_read(void *_packet, MYSQLND *conn TSRMLS_DC)
                DBG_ERR_FMT("RSET field packet %d bytes shorter than expected", p - begin - packet->header.size);
                php_error_docref(NULL TSRMLS_CC, E_WARNING, "Result set field packet "MYSQLND_SZ_T_SPEC" bytes "
                                                "shorter than expected", p - begin - packet->header.size);
+               DBG_RETURN(FAIL);
        }
 
        DBG_INF_FMT("allocing root. persistent=%d", packet->persistent_alloc);
@@ -1634,6 +1639,7 @@ php_mysqlnd_prepare_read(void *_packet, MYSQLND *conn TSRMLS_DC)
                DBG_ERR_FMT("PREPARE packet %d bytes shorter than expected", p - begin - packet->header.size);
                php_error_docref(NULL TSRMLS_CC, E_WARNING, "PREPARE packet "MYSQLND_SZ_T_SPEC" bytes shorter than expected",
                                                 p - begin - packet->header.size);
+               DBG_RETURN(FAIL);
        }
 
        DBG_RETURN(PASS);
@@ -1694,6 +1700,7 @@ php_mysqlnd_chg_user_read(void *_packet, MYSQLND *conn TSRMLS_DC)
                DBG_ERR_FMT("CHANGE_USER packet %d bytes shorter than expected", p - begin - packet->header.size);
                php_error_docref(NULL TSRMLS_CC, E_WARNING, "CHANGE_USER packet "MYSQLND_SZ_T_SPEC" bytes shorter than expected",
                                                 p - begin - packet->header.size);
+               DBG_RETURN(FAIL);
        }
 
        DBG_RETURN(PASS);