From: Gabriel Caruso Date: Fri, 30 Mar 2018 20:44:31 +0000 (-0300) Subject: Report unknown variables passed to compact() X-Git-Tag: php-7.3.0alpha2~2 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=fc775f6915b3e2432f5c1cb92c4578c892bb7ea3;p=php Report unknown variables passed to compact() --- diff --git a/UPGRADING b/UPGRADING index bd36c74cf0..ce0d4a852f 100644 --- a/UPGRADING +++ b/UPGRADING @@ -83,6 +83,7 @@ SimpleXML: treated as integers unconditionally. Standard: + . Undefined variables passed to compact() will now be reported as a notice. . getimagesize() and related functions now report the mime type of BMP images as image/bmp instead of image/x-ms-bmp, since the former has been registered with the IANA (see RFC 7903). diff --git a/ext/standard/array.c b/ext/standard/array.c index eb89c7061b..c2fb36e7ca 100644 --- a/ext/standard/array.c +++ b/ext/standard/array.c @@ -2598,14 +2598,15 @@ static void php_compact_var(HashTable *eg_active_symbol_table, zval *return_valu ZVAL_DEREF(value_ptr); ZVAL_COPY(&data, value_ptr); zend_hash_update(Z_ARRVAL_P(return_value), Z_STR_P(entry), &data); - } - if (zend_string_equals_literal(Z_STR_P(entry), "this")) { + } else if (zend_string_equals_literal(Z_STR_P(entry), "this")) { zend_object *object = zend_get_this_object(EG(current_execute_data)); if (object) { GC_ADDREF(object); ZVAL_OBJ(&data, object); zend_hash_update(Z_ARRVAL_P(return_value), Z_STR_P(entry), &data); } + } else { + php_error_docref(NULL, E_NOTICE, "Undefined variable: %s", ZSTR_VAL(Z_STR_P(entry))); } } else if (Z_TYPE_P(entry) == IS_ARRAY) { if (Z_REFCOUNTED_P(entry)) { diff --git a/ext/standard/tests/array/bug69198.phpt b/ext/standard/tests/array/bug69198.phpt index 3faa5aac1c..96a0f9a963 100644 --- a/ext/standard/tests/array/bug69198.phpt +++ b/ext/standard/tests/array/bug69198.phpt @@ -7,7 +7,9 @@ if (false) { } $result = compact('willNeverBeDefined'); var_dump($result, empty($result), $result === array(), empty($willNeverBeDefined)); ---EXPECT-- +?> +--EXPECTF-- +Notice: compact(): Undefined variable: willNeverBeDefined in %s on line %d array(0) { } bool(true) diff --git a/ext/standard/tests/array/compact.phpt b/ext/standard/tests/array/compact.phpt index e264be1977..d18f3d83e9 100644 --- a/ext/standard/tests/array/compact.phpt +++ b/ext/standard/tests/array/compact.phpt @@ -12,7 +12,8 @@ $location_vars = array("c\\u0327ity", "state"); $result = compact("event", $location_vars); var_dump($result); ?> ---EXPECT-- +--EXPECTF-- +Notice: compact(): Undefined variable: c\u0327ity in %s on line %d array(2) { ["event"]=> string(8) "SIGGRAPH" diff --git a/ext/standard/tests/array/compact_basic.phpt b/ext/standard/tests/array/compact_basic.phpt index 4d9aab0689..c71215fe1b 100644 --- a/ext/standard/tests/array/compact_basic.phpt +++ b/ext/standard/tests/array/compact_basic.phpt @@ -1,11 +1,11 @@ --TEST-- -Test compact() function : basic functionality +Test compact() function : basic functionality --FILE-- ---EXPECT-- +--EXPECTF-- *** Testing compact() : basic functionality *** array(6) { ["a"]=> @@ -80,6 +80,8 @@ array(0) { } array(0) { } + +Notice: compact(): Undefined variable: g in %s on line %d array(0) { } -Done \ No newline at end of file +Done diff --git a/ext/standard/tests/array/compact_variation2.phpt b/ext/standard/tests/array/compact_variation2.phpt index 91806bc0c8..8ca5020d6d 100644 --- a/ext/standard/tests/array/compact_variation2.phpt +++ b/ext/standard/tests/array/compact_variation2.phpt @@ -23,18 +23,22 @@ f(); ?> ==Done== ---EXPECT-- +--EXPECTF-- *** Testing compact() : usage variations - variables outside of current scope *** + +Notice: compact(): Undefined variable: a in %s on line %d array(2) { ["b"]=> string(3) "f.b" ["c"]=> string(3) "f.c" } + +Notice: compact(): Undefined variable: a in %s on line %d array(2) { ["b"]=> string(3) "f.b" ["c"]=> string(3) "f.c" } -==Done== \ No newline at end of file +==Done==