]> granicus.if.org Git - php/commitdiff
Fix stmt_free_result implementation and usage
authorNikita Popov <nikita.ppv@gmail.com>
Wed, 9 Dec 2020 10:13:48 +0000 (11:13 +0100)
committerNikita Popov <nikita.ppv@gmail.com>
Wed, 9 Dec 2020 10:13:48 +0000 (11:13 +0100)
Two bugs both affecting the bug_pecl_7976.phpt test ("works with
mysqlnd" haha):

 * We should not change the connection state in stmt_free_result.
   This makes mysql_stmt_free_result usable under mysqlnd and
   not just libmysqlclient.
 * If we call mysql_stmt_free_result, we still need to consume
   any outstanding result sets.

ext/mysqlnd/mysqlnd_ps.c
ext/pdo_mysql/mysql_statement.c
ext/pdo_mysql/tests/bug_pecl_7976.phpt

index b97bccbe6050e840aba8f77af2d8a6dc573954b7..d2ec46e8da11d3494e941a2e07faeb6f42353181 100644 (file)
@@ -1931,10 +1931,6 @@ MYSQLND_METHOD(mysqlnd_stmt, free_result)(MYSQLND_STMT * const s)
                stmt->state = MYSQLND_STMT_PREPARED;
        }
 
-       if (GET_CONNECTION_STATE(&conn->state) != CONN_QUIT_SENT) {
-               SET_CONNECTION_STATE(&conn->state, CONN_READY);
-       }
-
        DBG_RETURN(PASS);
 }
 /* }}} */
index 9d544b23c2fa95e786f6d72d447f5e66ebc244e3..e82cc6ddcc0443235dd12d762ee5a239f62d5c84 100644 (file)
@@ -893,9 +893,7 @@ static int pdo_mysql_stmt_cursor_closer(pdo_stmt_t *stmt) /* {{{ */
                S->result = NULL;
        }
        if (S->stmt) {
-               int retval;
-               retval = mysql_stmt_free_result(S->stmt);
-               PDO_DBG_RETURN(retval ? 0 : 1);
+               mysql_stmt_free_result(S->stmt);
        }
 
        while (mysql_more_results(S->H->server)) {
index 13d4d1b519263139044cee523204c43ecbce14a1..af34f02331cdd05b111f2d18d56e063235d4501e 100644 (file)
@@ -56,8 +56,6 @@ require __DIR__ . '/mysql_pdo_test.inc';
 $db = MySQLPDOTest::factory();
 $db->exec('DROP PROCEDURE IF EXISTS p');
 ?>
---XFAIL--
-Works with mysqlnd. It is not supported by libmysql. For libmysql is good enough to see no crash.
 --EXPECT--
 Emulated...
 array(1) {