Merge branch 'PHP-8.0' into PHP-8.1

* PHP-8.0:
  Fix GH-8068: mysqli_fetch_object creates inaccessible properties
This commit is contained in:
Christoph M. Becker 2022-03-14 14:28:35 +01:00
commit aef65393be
No known key found for this signature in database
GPG key ID: D66C9593118BCCB6
3 changed files with 35 additions and 3 deletions

4
NEWS
View file

@ -14,6 +14,10 @@ PHP NEWS
classes). (ilutov)
. Fixed bug GH-8142 (Compilation error on cygwin). (David Carlier)
- MySQLi:
. Fixed bug GH-8068 (mysqli_fetch_object creates inaccessible properties).
(cmb)
- Pcntl:
. Fixed bug GH-8142 (Compilation error on cygwin). (David Carlier)

View file

@ -1155,11 +1155,13 @@ void php_mysqli_fetch_into_hash(INTERNAL_FUNCTION_PARAMETERS, int override_flags
ZVAL_COPY_VALUE(&dataset, return_value);
object_init_ex(return_value, ce);
HashTable *prop_table = zend_symtable_to_proptable(Z_ARR(dataset));
zval_ptr_dtor(&dataset);
if (!ce->default_properties_count && !ce->__set) {
Z_OBJ_P(return_value)->properties = Z_ARR(dataset);
Z_OBJ_P(return_value)->properties = prop_table;
} else {
zend_merge_properties(return_value, Z_ARRVAL(dataset));
zval_ptr_dtor(&dataset);
zend_merge_properties(return_value, prop_table);
zend_array_release(prop_table);
}
if (ce->constructor) {

View file

@ -0,0 +1,26 @@
--TEST--
GH-8068 (mysqli_fetch_object creates inaccessible properties)
--EXTENSION--
mysqli
--SKIPIF--
<?php
require_once 'skipifconnectfailure.inc';
?>
--FILE--
<?php
require_once "connect.inc";
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
$mysqli = my_mysqli_connect($host, $user, $passwd, $db, $port, $socket);
$res = $mysqli->query('SELECT 42');
$obj = $res->fetch_object();
var_dump(
$obj,
$obj->{42}
);
?>
--EXPECT--
object(stdClass)#4 (1) {
["42"]=>
string(2) "42"
}
string(2) "42"