From: George Peter Banyard Date: Wed, 21 Aug 2019 00:43:24 +0000 (+0200) Subject: Promote warnings to errors in compact() X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=81277a104c98476b0c427ac514cd307e75bc68da;p=php Promote warnings to errors in compact() --- diff --git a/ext/standard/array.c b/ext/standard/array.c index 3355c1135f..083d14ec3c 100644 --- a/ext/standard/array.c +++ b/ext/standard/array.c @@ -2556,7 +2556,7 @@ static void php_compact_var(HashTable *eg_active_symbol_table, zval *return_valu } else if (Z_TYPE_P(entry) == IS_ARRAY) { if (Z_REFCOUNTED_P(entry)) { if (Z_IS_RECURSIVE_P(entry)) { - php_error_docref(NULL, E_WARNING, "recursion detected"); + zend_throw_error(NULL, "Recursion detected"); return; } Z_PROTECT_RECURSION_P(entry); diff --git a/ext/standard/tests/array/compact_variation1.phpt b/ext/standard/tests/array/compact_variation1.phpt index d2b9fc45df..9201bc5aa1 100644 --- a/ext/standard/tests/array/compact_variation1.phpt +++ b/ext/standard/tests/array/compact_variation1.phpt @@ -10,7 +10,7 @@ Test compact() function : usage variations - arrays containing references. /* * compact variations - arrays with references */ -echo "*** Testing compact() : usage variations - arrays containg references ***\n"; +echo "*** Testing compact() : usage variations - arrays containing references ***\n"; $a = 1; $b = 2; $c = 3; @@ -20,31 +20,34 @@ $arr2 = array("a", array(array(array("b")))); $arr2[1][0][0][] = &$arr2; $arr2[1][0][0][] = &$arr2[1]; $arr3 = array(&$string); -var_dump(compact($arr1)); -var_dump(compact($arr2)); -var_dump(compact($arr3)); -echo "Done"; -?> ---EXPECTF-- -*** Testing compact() : usage variations - arrays containg references *** -Warning: compact(): recursion detected in %s on line %d -array(1) { - ["a"]=> - int(1) +try { + var_dump(compact($arr1)); +} catch (\Error $e) { + echo $e->getMessage() . "\n"; } -Warning: compact(): recursion detected in %s on line %d +try { + var_dump(compact($arr2)); +} catch (\Error $e) { + echo $e->getMessage() . "\n"; +} -Warning: compact(): recursion detected in %s on line %d -array(2) { - ["a"]=> - int(1) - ["b"]=> - int(2) +try { + var_dump(compact($arr3)); +} catch (\Error $e) { + echo $e->getMessage() . "\n"; } +?> + +DONE +--EXPECT-- +*** Testing compact() : usage variations - arrays containing references *** +Recursion detected +Recursion detected array(1) { ["c"]=> int(3) } -Done + +DONE