mirror of
https://github.com/php/php-src.git
synced 2024-11-24 10:24:11 +08:00
Fixed bug #72629 (Caught exception assignment to variables ignores references).
This commit is contained in:
parent
3c3b8c8365
commit
97c0b133c5
2
NEWS
2
NEWS
@ -3,6 +3,8 @@ PHP NEWS
|
||||
?? ??? 2016 PHP 7.0.10
|
||||
|
||||
- Core:
|
||||
. Fixed bug #72629 (Caught exception assignment to variables ignores
|
||||
references). (Laruence)
|
||||
. Fixed bug #72594 (Calling an earlier instance of an included anonymous
|
||||
class fatals). (Laruence)
|
||||
. Fixed bug #72581 (previous property undefined in Exception after
|
||||
|
16
Zend/tests/try/bug72629.phpt
Normal file
16
Zend/tests/try/bug72629.phpt
Normal file
@ -0,0 +1,16 @@
|
||||
--TEST--
|
||||
Bug #72629 (Caught exception assignment to variables ignores references)
|
||||
--FILE--
|
||||
<?php
|
||||
|
||||
$var = null;
|
||||
$e = &$var;
|
||||
|
||||
try {
|
||||
throw new Exception;
|
||||
} catch (Exception $e) { }
|
||||
|
||||
var_dump($var === $e);
|
||||
|
||||
--EXPECT--
|
||||
bool(true)
|
@ -4154,6 +4154,7 @@ ZEND_VM_HANDLER(107, ZEND_CATCH, CONST, CV)
|
||||
USE_OPLINE
|
||||
zend_class_entry *ce, *catch_ce;
|
||||
zend_object *exception;
|
||||
zval *ex;
|
||||
|
||||
SAVE_OPLINE();
|
||||
/* Check whether an exception has been thrown, if not, jump over code */
|
||||
@ -4188,8 +4189,11 @@ ZEND_VM_HANDLER(107, ZEND_CATCH, CONST, CV)
|
||||
}
|
||||
|
||||
exception = EG(exception);
|
||||
zval_ptr_dtor(EX_VAR(opline->op2.var));
|
||||
ZVAL_OBJ(EX_VAR(opline->op2.var), EG(exception));
|
||||
ex = EX_VAR(opline->op2.var);
|
||||
if (UNEXPECTED(Z_ISREF_P(ex))) {
|
||||
ex = Z_REFVAL_P(ex);
|
||||
}
|
||||
ZVAL_OBJ(ex, EG(exception));
|
||||
if (UNEXPECTED(EG(exception) != exception)) {
|
||||
GC_REFCOUNT(EG(exception))++;
|
||||
HANDLE_EXCEPTION();
|
||||
|
@ -9553,6 +9553,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CATCH_SPEC_CONST_CV_HANDLER(ZE
|
||||
USE_OPLINE
|
||||
zend_class_entry *ce, *catch_ce;
|
||||
zend_object *exception;
|
||||
zval *ex;
|
||||
|
||||
SAVE_OPLINE();
|
||||
/* Check whether an exception has been thrown, if not, jump over code */
|
||||
@ -9587,8 +9588,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CATCH_SPEC_CONST_CV_HANDLER(ZE
|
||||
}
|
||||
|
||||
exception = EG(exception);
|
||||
zval_ptr_dtor(EX_VAR(opline->op2.var));
|
||||
ZVAL_OBJ(EX_VAR(opline->op2.var), EG(exception));
|
||||
ex = EX_VAR(opline->op2.var);
|
||||
if (UNEXPECTED(Z_ISREF_P(ex))) {
|
||||
ex = Z_REFVAL_P(ex);
|
||||
}
|
||||
ZVAL_OBJ(ex, EG(exception));
|
||||
if (UNEXPECTED(EG(exception) != exception)) {
|
||||
GC_REFCOUNT(EG(exception))++;
|
||||
HANDLE_EXCEPTION();
|
||||
|
@ -5,7 +5,7 @@
|
||||
// environment var PGSQL_TEST_CONNSTR
|
||||
|
||||
// "test" database must exist. i.e. "createdb test" before testing
|
||||
$conn_str = getenv('PGSQL_TEST_CONNSTR') ?: "host=localhost dbname=test port=5432"; // connection string
|
||||
$conn_str = getenv('PGSQL_TEST_CONNSTR') ?: "host=localhost dbname=test port=5432 user=postgres password=postgres"; // connection string
|
||||
|
||||
$table_name = "php_pgsql_test"; // test table that will be created
|
||||
$table_name_92 = "php_pgsql_test_92"; // test table that will be created
|
||||
|
@ -2,7 +2,7 @@
|
||||
/* edit configure.in to change version number */
|
||||
#define PHP_MAJOR_VERSION 7
|
||||
#define PHP_MINOR_VERSION 0
|
||||
#define PHP_RELEASE_VERSION 10
|
||||
#define PHP_RELEASE_VERSION 7
|
||||
#define PHP_EXTRA_VERSION "-dev"
|
||||
#define PHP_VERSION "7.0.10-dev"
|
||||
#define PHP_VERSION_ID 70010
|
||||
#define PHP_VERSION "7.0.7-dev"
|
||||
#define PHP_VERSION_ID 70007
|
||||
|
Loading…
Reference in New Issue
Block a user