From 3cd63979cce1919f2af3e92f61ce06c1cf416af8 Mon Sep 17 00:00:00 2001 From: George Peter Banyard Date: Wed, 21 Aug 2019 02:43:24 +0200 Subject: [PATCH] Promote warnings to errors in compact() --- ext/standard/array.c | 2 +- .../tests/array/compact_variation1.phpt | 43 ++++++++++--------- 2 files changed, 24 insertions(+), 21 deletions(-) diff --git a/ext/standard/array.c b/ext/standard/array.c index 70523d479ef4f..f04d96ba9e2fa 100644 --- a/ext/standard/array.c +++ b/ext/standard/array.c @@ -2551,7 +2551,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 d2b9fc45df0c7..9201bc5aa1159 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