Fix #46050: odbc_next_result corrupts prepared resource

When resetting the result's values, we also have to reset its numcols.
This commit is contained in:
Christoph M. Becker 2020-10-05 17:46:37 +02:00
parent aa405b7da2
commit 69ba81d183
3 changed files with 29 additions and 0 deletions

1
NEWS
View File

@ -18,6 +18,7 @@ PHP NEWS
(cmb)
. Fixed bug #80150 (Failure to fetch error message). (cmb)
. Fixed bug #80152 (odbc_execute() moves internal pointer of $params). (cmb)
. Fixed bug #46050 (odbc_next_result corrupts prepared resource). (cmb)
- OPcache:
. Fixed bug #80083 (Optimizer pass 6 removes variables used for ibm_db2 data

View File

@ -2773,6 +2773,7 @@ PHP_FUNCTION(odbc_next_result)
}
efree(result->values);
result->values = NULL;
result->numcols = 0;
}
result->fetched = 0;

View File

@ -0,0 +1,27 @@
--TEST--
Bug #46050 (odbc_next_result corrupts prepared resource)
--SKIPIF--
<?php include 'skipif.inc'; ?>
--FILE--
<?php
include __DIR__ . "/config.inc";
$conn = odbc_connect($dsn, $user, $pass);
$stmt = odbc_prepare($conn, "SELECT 1");
var_dump(odbc_execute($stmt));
var_dump(odbc_fetch_array($stmt));
var_dump(odbc_next_result($stmt));
var_dump(odbc_execute($stmt));
var_dump(odbc_fetch_array($stmt));
?>
--EXPECT--
bool(true)
array(1) {
["1"]=>
string(1) "1"
}
bool(false)
bool(true)
array(1) {
["1"]=>
string(1) "1"
}