]> granicus.if.org Git - php/commitdiff
Merge branch 'PHP-7.4'
authorNikita Popov <nikita.ppv@gmail.com>
Tue, 7 Jul 2020 10:17:11 +0000 (12:17 +0200)
committerNikita Popov <nikita.ppv@gmail.com>
Tue, 7 Jul 2020 10:28:35 +0000 (12:28 +0200)
* PHP-7.4:
  Fixed bug #78598

1  2 
Zend/tests/undef_index_to_exception.phpt
Zend/zend_execute.c

index 0000000000000000000000000000000000000000,d113608a5edcf4fefbc7103dde330a1202fc0bef..919b0d47a200748bfec3f7dd8c3d71eb9378affb
mode 000000,100644..100644
--- /dev/null
@@@ -1,0 -1,46 +1,46 @@@
 -Undefined variable: test
+ --TEST--
+ Converting undefined index/offset notice to exception
+ --FILE--
+ <?php
+ set_error_handler(function($_, $msg) {
+     throw new Exception($msg);
+ });
+ $test = [];
+ try {
+     $test[0] .= "xyz";
+ } catch (Exception $e) {
+     echo $e->getMessage(), "\n";
+ }
+ var_dump($test);
+ try {
+     $test["key"] .= "xyz";
+ } catch (Exception $e) {
+     echo $e->getMessage(), "\n";
+ }
+ var_dump($test);
+ unset($test);
+ try {
+     $GLOBALS["test"] .= "xyz";
+ } catch (Exception $e) {
+     echo $e->getMessage(), "\n";
+ }
+ try {
+     var_dump($test);
+ } catch (Exception $e) {
+     echo $e->getMessage(), "\n";
+ }
+ ?>
+ --EXPECT--
+ Undefined offset: 0
+ array(0) {
+ }
+ Undefined index: key
+ array(0) {
+ }
+ Undefined index: test
++Undefined variable $test
index fcd2a437e668ce3acae00278d67b709f9195f6b5,7b27c5a3a506070cec9f3a3b1e193de9bde2d030..f49b005a14e3549f1fcbe4aa49acaf2ad3ec4163
@@@ -2143,7 -2236,7 +2185,9 @@@ fetch_from_array
                } else {
                        retval = zend_fetch_dimension_address_inner(Z_ARRVAL_P(container), dim, dim_type, type EXECUTE_DATA_CC);
                        if (UNEXPECTED(!retval)) {
-                               ZVAL_UNDEF(result);
 -                              ZVAL_ERROR(result);
++                              /* This may fail without throwing if the array was modified while throwing an
++                               * undefined index error. */
++                              ZVAL_NULL(result);
                                return;
                        }
                }