diff options
| author | Dmitry Stogov <dmitry@zend.com> | 2016-12-02 15:14:48 +0300 |
|---|---|---|
| committer | Dmitry Stogov <dmitry@zend.com> | 2016-12-02 15:14:48 +0300 |
| commit | e3195045172bebd2ed9fbfa1a6182c7470e6b645 (patch) | |
| tree | 40c723e0b5d5da3b27785eb2ade20e1bacfa7fc2 /Zend/zend_operators.c | |
| parent | 0314958a43ee349f5f3fa32e6969e2ef9878e58d (diff) | |
| parent | b3a4de65cd7f46dd7e3c0d4dabbf894d1fdcd85b (diff) | |
| download | php-git-e3195045172bebd2ed9fbfa1a6182c7470e6b645.tar.gz | |
Merge branch 'PHP-7.1'
* PHP-7.1:
Fixed behavior of failing compound assignments (they shouldn't change the source value when exception thrown during type converion).
Diffstat (limited to 'Zend/zend_operators.c')
| -rw-r--r-- | Zend/zend_operators.c | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/Zend/zend_operators.c b/Zend/zend_operators.c index d5d42ca1e1..d3edee4cfa 100644 --- a/Zend/zend_operators.c +++ b/Zend/zend_operators.c @@ -1623,6 +1623,10 @@ ZEND_API int ZEND_FASTCALL concat_function(zval *result, zval *op1, zval *op2) / ZEND_TRY_BINARY_OBJECT_OPERATION(ZEND_CONCAT, concat_function); use_copy1 = zend_make_printable_zval(op1, &op1_copy); if (use_copy1) { + if (UNEXPECTED(EG(exception))) { + zval_dtor(&op1_copy); + return FAILURE; + } if (result == op1) { if (UNEXPECTED(op1 == op2)) { op2 = &op1_copy; @@ -1641,6 +1645,13 @@ ZEND_API int ZEND_FASTCALL concat_function(zval *result, zval *op1, zval *op2) / ZEND_TRY_BINARY_OP2_OBJECT_OPERATION(ZEND_CONCAT); use_copy2 = zend_make_printable_zval(op2, &op2_copy); if (use_copy2) { + if (UNEXPECTED(EG(exception))) { + if (UNEXPECTED(use_copy1)) { + zval_dtor(op1); + } + zval_dtor(&op2_copy); + return FAILURE; + } op2 = &op2_copy; } } |
