From 472a598c0316d27efa22a0a78098d3de693c0b9b Mon Sep 17 00:00:00 2001 From: George Peter Banyard Date: Wed, 21 Aug 2019 02:18:00 +0200 Subject: [PATCH] Promote warnings to errors in array_combine() --- ext/standard/array.c | 12 +++--- .../tests/array/array_combine_error2.phpt | 39 +++++++++++-------- 2 files changed, 27 insertions(+), 24 deletions(-) diff --git a/ext/standard/array.c b/ext/standard/array.c index 70523d479ef4f..5f0f16072b3f9 100644 --- a/ext/standard/array.c +++ b/ext/standard/array.c @@ -6401,7 +6401,7 @@ PHP_FUNCTION(array_chunk) } /* }}} */ -/* {{{ proto array|false array_combine(array keys, array values) +/* {{{ proto array array_combine(array keys, array values) Creates an array by using the elements of the first parameter as keys and the elements of the second as the corresponding values */ PHP_FUNCTION(array_combine) { @@ -6419,8 +6419,8 @@ PHP_FUNCTION(array_combine) num_values = zend_hash_num_elements(values); if (num_keys != num_values) { - php_error_docref(NULL, E_WARNING, "Both parameters should have an equal number of elements"); - RETURN_FALSE; + zend_throw_error(NULL, "Both parameters should have an equal number of elements"); + return; } if (!num_keys) { @@ -6435,13 +6435,11 @@ PHP_FUNCTION(array_combine) } else if (Z_TYPE(values->arData[pos_values].val) != IS_UNDEF) { entry_values = &values->arData[pos_values].val; if (Z_TYPE_P(entry_keys) == IS_LONG) { - entry_values = zend_hash_index_update(Z_ARRVAL_P(return_value), - Z_LVAL_P(entry_keys), entry_values); + entry_values = zend_hash_index_update(Z_ARRVAL_P(return_value), Z_LVAL_P(entry_keys), entry_values); } else { zend_string *tmp_key; zend_string *key = zval_get_tmp_string(entry_keys, &tmp_key); - entry_values = zend_symtable_update(Z_ARRVAL_P(return_value), - key, entry_values); + entry_values = zend_symtable_update(Z_ARRVAL_P(return_value), key, entry_values); zend_tmp_string_release(tmp_key); } zval_add_ref(entry_values); diff --git a/ext/standard/tests/array/array_combine_error2.phpt b/ext/standard/tests/array/array_combine_error2.phpt index 2d820a0d2182e..463dc6dfe812a 100644 --- a/ext/standard/tests/array/array_combine_error2.phpt +++ b/ext/standard/tests/array/array_combine_error2.phpt @@ -16,19 +16,32 @@ var_dump( array_combine(array(), array()) ); // Testing array_combine by passing empty array to $keys echo "\n-- Testing array_combine() function with empty array for \$keys argument --\n"; -var_dump( array_combine(array(), array(1, 2)) ); +try { + var_dump( array_combine(array(), array(1, 2)) ); +} catch (\Error $e) { + echo $e->getMessage(); +} // Testing array_combine by passing empty array to $values echo "\n-- Testing array_combine() function with empty array for \$values argument --\n"; -var_dump( array_combine(array(1, 2), array()) ); +try { + var_dump( array_combine(array(1, 2), array()) ); +} catch (\Error $e) { + echo $e->getMessage(); +} // Testing array_combine with arrays having unequal number of elements echo "\n-- Testing array_combine() function by passing array with unequal number of elements --\n"; -var_dump( array_combine(array(1, 2), array(1, 2, 3)) ); +try { + var_dump( array_combine(array(1, 2), array(1, 2, 3)) ); +} catch (\Error $e) { + echo $e->getMessage(); +} -echo "Done"; ?> ---EXPECTF-- + +DONE +--EXPECT-- *** Testing array_combine() : error conditions specific to array_combine() *** -- Testing array_combine() function with empty arrays -- @@ -36,17 +49,9 @@ array(0) { } -- Testing array_combine() function with empty array for $keys argument -- - -Warning: array_combine(): Both parameters should have an equal number of elements in %s on line %d -bool(false) - +Both parameters should have an equal number of elements -- Testing array_combine() function with empty array for $values argument -- - -Warning: array_combine(): Both parameters should have an equal number of elements in %s on line %d -bool(false) - +Both parameters should have an equal number of elements -- Testing array_combine() function by passing array with unequal number of elements -- - -Warning: array_combine(): Both parameters should have an equal number of elements in %s on line %d -bool(false) -Done +Both parameters should have an equal number of elements +DONE