]> granicus.if.org Git - php/commitdiff
Convert iterator by reference errors to exceptions
authorNikita Popov <nikita.ppv@gmail.com>
Mon, 19 Feb 2018 20:57:07 +0000 (21:57 +0100)
committerNikita Popov <nikita.ppv@gmail.com>
Mon, 19 Feb 2018 20:58:56 +0000 (21:58 +0100)
I'm using RuntimeException in SPL, because other SPL classes that
throw this error used it. Error is used for everything else, because
that's what core does.

12 files changed:
ext/com_dotnet/com_iterator.c
ext/com_dotnet/com_saproxy.c
ext/date/php_date.c
ext/dom/dom_iterators.c
ext/pdo/pdo_stmt.c
ext/simplexml/simplexml.c
ext/spl/spl_array.c
ext/spl/spl_directory.c
ext/spl/spl_iterators.c
ext/spl/tests/DirectoryIterator_by_reference.phpt
ext/spl/tests/array_019.phpt
ext/spl/tests/iterator_069.phpt

index 2bf1735bef1a1301be6b92e4c2f5d4e94ca30207..c60bff0ec8f0a88bed94fd1e596cc8e0abb49d28 100644 (file)
@@ -146,7 +146,8 @@ zend_object_iterator *php_com_iter_get(zend_class_entry *ce, zval *object, int b
        zval ptr;
 
        if (by_ref) {
-               zend_error(E_ERROR, "An iterator cannot be used with foreach by reference");
+               zend_throw_error(NULL, "An iterator cannot be used with foreach by reference");
+               return NULL;
        }
 
        obj = CDNO_FETCH(object);
index 01acd58274d712e0a5ea066b92b38967d61bd12c..81bbb63ca85ea38d3a0ac45329b1c667d96bcdfc 100644 (file)
@@ -542,7 +542,8 @@ zend_object_iterator *php_com_saproxy_iter_get(zend_class_entry *ce, zval *objec
        int i;
 
        if (by_ref) {
-               zend_error(E_ERROR, "An iterator cannot be used with foreach by reference");
+               zend_throw_error(NULL, "An iterator cannot be used with foreach by reference");
+               return NULL;
        }
 
        I = ecalloc(1, sizeof(*I));
index 6bb1c7d5ccee1c77243bd9a481c75e17f049ea8e..bf2997d94670df93291ad46298735d8115e19ccf 100644 (file)
@@ -2007,7 +2007,8 @@ zend_object_iterator *date_object_period_get_iterator(zend_class_entry *ce, zval
        date_period_it *iterator = emalloc(sizeof(date_period_it));
 
        if (by_ref) {
-               zend_error(E_ERROR, "An iterator cannot be used with foreach by reference");
+               zend_throw_error(NULL, "An iterator cannot be used with foreach by reference");
+               return NULL;
        }
 
        zend_iterator_init((zend_object_iterator*)iterator);
index 715d9003394e4c6a41d9d96d6a247c3794af324f..493065327468cdd05f2ce4c979652f72f48b9dcb 100644 (file)
@@ -264,7 +264,8 @@ zend_object_iterator *php_dom_get_iterator(zend_class_entry *ce, zval *object, i
        php_dom_iterator *iterator;
 
        if (by_ref) {
-               zend_error(E_ERROR, "An iterator cannot be used with foreach by reference");
+               zend_throw_error(NULL, "An iterator cannot be used with foreach by reference");
+               return NULL;
        }
        iterator = emalloc(sizeof(php_dom_iterator));
        zend_iterator_init(&iterator->intern);
index 31987ff2e5d1f5dfb440fd35e8bb165c79b40c9a..423f0e626005a21c2161b47cb0e7fa5a2eab1c6f 100644 (file)
@@ -2469,7 +2469,8 @@ zend_object_iterator *pdo_stmt_iter_get(zend_class_entry *ce, zval *object, int
        struct php_pdo_iterator *I;
 
        if (by_ref) {
-               zend_error(E_ERROR, "An iterator cannot be used with foreach by reference");
+               zend_throw_error(NULL, "An iterator cannot be used with foreach by reference");
+               return NULL;
        }
 
        I = ecalloc(1, sizeof(struct php_pdo_iterator));
index a497a360f8f5555e427c8877a8a19a9b12b790f6..7a5767871d196dd3112e8ecdfa9f5efd1abc5684 100644 (file)
@@ -2425,7 +2425,8 @@ zend_object_iterator *php_sxe_get_iterator(zend_class_entry *ce, zval *object, i
        php_sxe_iterator *iterator;
 
        if (by_ref) {
-               zend_error(E_ERROR, "An iterator cannot be used with foreach by reference");
+               zend_throw_error(NULL, "An iterator cannot be used with foreach by reference");
+               return NULL;
        }
        iterator = emalloc(sizeof(php_sxe_iterator));
        zend_iterator_init(&iterator->intern);
index 0e610ee1253bfa9a68c09e4689dd826a3e58fafc..0093831dde409bb563eb45cd130576530ed457ff 100644 (file)
@@ -1175,7 +1175,8 @@ zend_object_iterator *spl_array_get_iterator(zend_class_entry *ce, zval *object,
        spl_array_object *array_object = Z_SPLARRAY_P(object);
 
        if (by_ref && (array_object->ar_flags & SPL_ARRAY_OVERLOADED_CURRENT)) {
-               zend_error(E_ERROR, "An iterator cannot be used with foreach by reference");
+               zend_throw_exception(spl_ce_RuntimeException, "An iterator cannot be used with foreach by reference", 0);
+               return NULL;
        }
 
        iterator = emalloc(sizeof(zend_user_iterator));
index 6f0c19039a6f17662413baf91ca0c46e6b30669a..5c144b0f98cb4998526a5fe0a0d408ee8ba29507 100644 (file)
@@ -1639,7 +1639,8 @@ zend_object_iterator *spl_filesystem_dir_get_iterator(zend_class_entry *ce, zval
        spl_filesystem_object *dir_object;
 
        if (by_ref) {
-               zend_error(E_ERROR, "An iterator cannot be used with foreach by reference");
+               zend_throw_exception(spl_ce_RuntimeException, "An iterator cannot be used with foreach by reference", 0);
+               return NULL;
        }
        dir_object = Z_SPLFILESYSTEM_P(object);
        iterator = spl_filesystem_object_to_iterator(dir_object);
@@ -1838,7 +1839,8 @@ zend_object_iterator *spl_filesystem_tree_get_iterator(zend_class_entry *ce, zva
        spl_filesystem_object *dir_object;
 
        if (by_ref) {
-               zend_error(E_ERROR, "An iterator cannot be used with foreach by reference");
+               zend_throw_exception(spl_ce_RuntimeException, "An iterator cannot be used with foreach by reference", 0);
+               return NULL;
        }
        dir_object = Z_SPLFILESYSTEM_P(object);
        iterator = spl_filesystem_object_to_iterator(dir_object);
index ee621243e063ec86afc56ef19b23a08abe220f55..fdb8c4b401f19fae4109a1cb2e4a18b1e0afcdf3 100644 (file)
@@ -449,7 +449,8 @@ static zend_object_iterator *spl_recursive_it_get_iterator(zend_class_entry *ce,
        spl_recursive_it_object *object;
 
        if (by_ref) {
-               zend_error(E_ERROR, "An iterator cannot be used with foreach by reference");
+               zend_throw_exception(spl_ce_RuntimeException, "An iterator cannot be used with foreach by reference", 0);
+               return NULL;
        }
        iterator = emalloc(sizeof(spl_recursive_it_iterator));
        object   = Z_SPLRECURSIVE_IT_P(zobject);
index 06127ec37b25ff5764bcd80b47a3467699d81fa0..3c5c5ac2b2a173f4d0944e6bed93da7fda5f0df8 100644 (file)
@@ -11,4 +11,7 @@ foreach( $it as &$file ) {
 }
 ?>
 --EXPECTF--
-Fatal error: An iterator cannot be used with foreach by reference in %s on line %d
+Fatal error: Uncaught RuntimeException: An iterator cannot be used with foreach by reference in %s:%d
+Stack trace:
+#0 {main}
+  thrown in %s on line %d
index d128f4de7b679bd689b94b0d2aa5175e92b0a86d..30cc9972af7de0867e2434e4913be736ba8824ea 100644 (file)
@@ -27,4 +27,7 @@ int(2)
 int(3)
 int(4)
 
-Fatal error: An iterator cannot be used with foreach by reference in %sarray_019.php on line %d
+Fatal error: Uncaught RuntimeException: An iterator cannot be used with foreach by reference in %s:%d
+Stack trace:
+#0 {main}
+  thrown in %s on line %d
index 1ee44785b3ce09af32ff9c23d812aea70766198b..101fe91681609cf47017e194e77feca4838cc232 100644 (file)
@@ -14,4 +14,7 @@ foreach ($recItIt as &$val) echo "$val\n";
 
 ?>
 --EXPECTF--
-Fatal error: An iterator cannot be used with foreach by reference in %s on line %d
+Fatal error: Uncaught RuntimeException: An iterator cannot be used with foreach by reference in %s:%d
+Stack trace:
+#0 {main}
+  thrown in %s on line %d