From: Anatol Belski Date: Mon, 9 May 2016 15:15:40 +0000 (+0200) Subject: Revert "Backport patch for bug #71820" X-Git-Tag: php-7.0.7RC1~5^2 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=1cc536af5a9790288ef6638e3b167858d3b0cca1;p=php Revert "Backport patch for bug #71820" This reverts commit 1b632cfe834bfd87d182566d7d960df7d10ded72. This fixed bug #72151, and reverts the fix for bug #71820. See also bug #50636 and #49521 for the history. --- diff --git a/ext/mysqli/mysqli.c b/ext/mysqli/mysqli.c index 211f8ea319..f19f6a8504 100644 --- a/ext/mysqli/mysqli.c +++ b/ext/mysqli/mysqli.c @@ -1295,13 +1295,9 @@ void php_mysqli_fetch_into_hash(INTERNAL_FUNCTION_PARAMETERS, int override_flags zend_fcall_info fci; zend_fcall_info_cache fcc; zval *retval_ptr; - zend_bool props_merged = 0; object_and_properties_init(return_value, ce, NULL); - if (!ce->__set) { - props_merged = 1; - zend_merge_properties(return_value, Z_ARRVAL(dataset), 1 TSRMLS_CC); - } + zend_merge_properties(return_value, Z_ARRVAL(dataset), 1 TSRMLS_CC); if (ce->constructor) { fci.size = sizeof(fci); @@ -1335,10 +1331,6 @@ void php_mysqli_fetch_into_hash(INTERNAL_FUNCTION_PARAMETERS, int override_flags if (zend_call_function(&fci, &fcc TSRMLS_CC) == FAILURE) { zend_throw_exception_ex(zend_exception_get_default(TSRMLS_C), 0 TSRMLS_CC, "Could not execute %s::%s()", ce->name, ce->constructor->common.function_name); - if (fci.params) { - efree(fci.params); - } - return; } else { if (retval_ptr) { zval_ptr_dtor(&retval_ptr); @@ -1349,11 +1341,6 @@ void php_mysqli_fetch_into_hash(INTERNAL_FUNCTION_PARAMETERS, int override_flags } } else if (ctor_params) { zend_throw_exception_ex(zend_exception_get_default(TSRMLS_C), 0 TSRMLS_CC, "Class %s does not have a constructor hence you cannot use ctor_params", ce->name); - return; - } - - if (!props_merged) { - zend_merge_properties(return_value, Z_ARRVAL(dataset), 1 TSRMLS_CC); } } } diff --git a/ext/mysqli/tests/bug71820.phpt b/ext/mysqli/tests/bug71820.phpt deleted file mode 100644 index 02a25939e2..0000000000 --- a/ext/mysqli/tests/bug71820.phpt +++ /dev/null @@ -1,104 +0,0 @@ ---TEST-- -Bug #71820 __set has to be called after constructor, mysqli part ---SKIPIF-- - ---FILE-- -set_from_constructor = $set_from_constructor; - } - - public function __set($name, $value) - { - if (!isset($this->data[$name])) { - /* $this->set_from_constructor has an expected value */ - $this->data[$name] = 42 == $this->set_from_constructor ? $value : -1; - return; - } - throw new \Exception('Duplicity column name.'); - } - -} - - -if (!($connection = my_mysqli_connect($host, $user, $passwd, $db, $port, $socket))) { - printf("[001] Cannot connect to the server"); -} - -$rc = mysqli_query($connection, "DROP TABLE IF EXISTS $tableName"); -if (!$rc) - printf("[002] [%d] %s\n", mysqli_errno($connection), mysqli_error($connection)); - -$table = << -==DONE== ---EXPECTF-- -object(TestRow)#%d (3) { - ["set_from_constructor":"TestRow":private]=> - int(42) - ["data":"TestRow":private]=> - array(2) { - ["id"]=> - string(1) "1" - ["name"]=> - string(3) "Doe" - } - ["hello":"TestRow":private]=> - string(5) "world" -} -object(TestRow)#%d (3) { - ["set_from_constructor":"TestRow":private]=> - int(42) - ["data":"TestRow":private]=> - array(2) { - ["id"]=> - string(1) "2" - ["name"]=> - string(3) "Joe" - } - ["hello":"TestRow":private]=> - string(5) "world" -} -==DONE== diff --git a/ext/pgsql/pgsql.c b/ext/pgsql/pgsql.c index 84195f7142..8f3518d7c2 100644 --- a/ext/pgsql/pgsql.c +++ b/ext/pgsql/pgsql.c @@ -2784,13 +2784,9 @@ static void php_pgsql_fetch_hash(INTERNAL_FUNCTION_PARAMETERS, long result_type, zend_fcall_info fci; zend_fcall_info_cache fcc; zval *retval_ptr; - zend_bool props_merged = 0; object_and_properties_init(return_value, ce, NULL); - if (!ce->__set) { - props_merged = 1; - zend_merge_properties(return_value, Z_ARRVAL(dataset), 1 TSRMLS_CC); - } + zend_merge_properties(return_value, Z_ARRVAL(dataset), 1 TSRMLS_CC); if (ce->constructor) { fci.size = sizeof(fci); @@ -2824,10 +2820,6 @@ static void php_pgsql_fetch_hash(INTERNAL_FUNCTION_PARAMETERS, long result_type, if (zend_call_function(&fci, &fcc TSRMLS_CC) == FAILURE) { zend_throw_exception_ex(zend_exception_get_default(TSRMLS_C), 0 TSRMLS_CC, "Could not execute %s::%s()", ce->name, ce->constructor->common.function_name); - if (fci.params) { - efree(fci.params); - } - return; } else { if (retval_ptr) { zval_ptr_dtor(&retval_ptr); @@ -2838,11 +2830,6 @@ static void php_pgsql_fetch_hash(INTERNAL_FUNCTION_PARAMETERS, long result_type, } } else if (ctor_params) { zend_throw_exception_ex(zend_exception_get_default(TSRMLS_C), 0 TSRMLS_CC, "Class %s does not have a constructor hence you cannot use ctor_params", ce->name); - return; - } - - if (!props_merged) { - zend_merge_properties(return_value, Z_ARRVAL(dataset), 1 TSRMLS_CC); } } } diff --git a/ext/pgsql/tests/bug71820.phpt b/ext/pgsql/tests/bug71820.phpt deleted file mode 100644 index 4d99e3468e..0000000000 --- a/ext/pgsql/tests/bug71820.phpt +++ /dev/null @@ -1,93 +0,0 @@ ---TEST-- -Bug #71820 pg_fetch_object bind parameters before call constructor ---SKIPIF-- - ---FILE-- -set_from_constructor = $set_from_constructor; - } - - public function __set($name, $value) - { - if (!isset($this->data[$name])) { - /* $this->set_from_constructor has an expected value */ - $this->data[$name] = 42 == $this->set_from_constructor ? $value : -1; - return; - } - throw new \Exception('Duplicity column name.'); - } - -} - -$connection = pg_connect($conn_str); - -if (!$connection) { - die('Connection faild.'); -} - -$table = << 'Doe', '$2' => 'Joe']); - -$result = pg_query('SELECT * FROM ' . $tableName . ' LIMIT 10;'); - -while ($row = pg_fetch_object($result, NULL, 'TestRow', [42])) { - var_dump($row); -} - -pg_query($connection, "DROP TABLE $tableName"); - -pg_close($connection); - -?> -==DONE== ---EXPECTF-- -object(TestRow)#%d (3) { - ["set_from_constructor":"TestRow":private]=> - int(42) - ["data":"TestRow":private]=> - array(2) { - ["id"]=> - string(1) "1" - ["name"]=> - string(3) "Doe" - } - ["hello":"TestRow":private]=> - int(42) -} -object(TestRow)#%d (3) { - ["set_from_constructor":"TestRow":private]=> - int(42) - ["data":"TestRow":private]=> - array(2) { - ["id"]=> - string(1) "2" - ["name"]=> - string(3) "Joe" - } - ["hello":"TestRow":private]=> - int(42) -} -==DONE==