]> granicus.if.org Git - php/commitdiff
Promote warnings to errors in extract()
authorGeorge Peter Banyard <girgias@php.net>
Wed, 21 Aug 2019 00:52:20 +0000 (02:52 +0200)
committerGeorge Peter Banyard <girgias@php.net>
Wed, 28 Aug 2019 21:15:01 +0000 (23:15 +0200)
ext/standard/array.c
ext/standard/basic_functions.stub.php
ext/standard/basic_functions_arginfo.h
ext/standard/tests/array/extract_error.phpt
ext/standard/tests/array/extract_error_variation1.phpt [new file with mode: 0644]

index 5f3830d89984f197a4e610625296b6b2294f4d7c..3492f942a2942f3b416c06e8ab01647b5ae3210f 100644 (file)
@@ -2427,7 +2427,7 @@ static zend_long php_extract_skip(zend_array *arr, zend_array *symbol_table) /*
 }
 /* }}} */
 
-/* {{{ proto int|null extract(array var_array [, int extract_type [, string prefix]])
+/* {{{ proto int extract(array var_array [, int extract_type [, string prefix]])
    Imports variables into symbol table from an array */
 PHP_FUNCTION(extract)
 {
@@ -2452,18 +2452,18 @@ PHP_FUNCTION(extract)
        extract_type &= 0xff;
 
        if (extract_type < EXTR_OVERWRITE || extract_type > EXTR_IF_EXISTS) {
-               php_error_docref(NULL, E_WARNING, "Invalid extract type");
+               zend_throw_error(NULL, "Invalid extract type");
                return;
        }
 
        if (extract_type > EXTR_SKIP && extract_type <= EXTR_PREFIX_IF_EXISTS && ZEND_NUM_ARGS() < 3) {
-               php_error_docref(NULL, E_WARNING, "specified extract type requires the prefix parameter");
+               zend_throw_error(NULL, "Specified extract type requires the prefix parameter");
                return;
        }
 
        if (prefix) {
                if (ZSTR_LEN(prefix) && !php_valid_var_name(ZSTR_VAL(prefix), ZSTR_LEN(prefix))) {
-                       php_error_docref(NULL, E_WARNING, "prefix is not a valid identifier");
+                       zend_throw_error(NULL, "Prefix is not a valid identifier");
                        return;
                }
        }
index e110e5f2db4ab448763d374d10b0c807a6a6caa2..0922d39115674d74182d8880f1d16734256566bb 100755 (executable)
@@ -139,7 +139,7 @@ function in_array($needle, array $haystack, bool $strict = false): bool {}
 function array_search($needle, array $haystack, bool $strict = false) {}
 
 /** @prefer-ref $arg */
-function extract(array &$arg, int $extract_type = EXTR_OVERWRITE, string $prefix = ""): ?int {}
+function extract(array &$arg, int $extract_type = EXTR_OVERWRITE, string $prefix = ""): int {}
 
 function compact($var_name, ...$var_names): array {}
 
index 6663c4131f8ee1d41b501f2ada3d39c541e08d6e..5a45b55b034436939930d85bff08830c7aa5da9e 100755 (executable)
@@ -150,7 +150,7 @@ ZEND_BEGIN_ARG_INFO_EX(arginfo_array_search, 0, 0, 2)
        ZEND_ARG_TYPE_INFO(0, strict, _IS_BOOL, 0)
 ZEND_END_ARG_INFO()
 
-ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_extract, 0, 1, IS_LONG, 1)
+ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_extract, 0, 1, IS_LONG, 0)
        ZEND_ARG_TYPE_INFO(ZEND_SEND_PREFER_REF, arg, IS_ARRAY, 0)
        ZEND_ARG_TYPE_INFO(0, extract_type, IS_LONG, 0)
        ZEND_ARG_TYPE_INFO(0, prefix, IS_STRING, 0)
index 08e1824b0fb301416e7007bf34b2a6bf5ffd7ead..2103a1b9a4819561d273c8478e6f38cfd504f3f9 100644 (file)
@@ -8,11 +8,25 @@ echo "*** Testing Error Conditions ***\n";
 
 /* Invalid second argument ( only 0-6 is valid) */
 $arr = array(1);
-var_dump( extract($arr, -1 . "wddr") );
-var_dump( extract($arr, 7 , "wddr") );
+
+try {
+    var_dump( extract($arr, -1 . "wddr") );
+} catch (\Error $e) {
+    echo $e->getMessage() . "\n";
+}
+
+try {
+    var_dump( extract($arr, 7 , "wddr") );
+} catch (\Error $e) {
+    echo $e->getMessage() . "\n";
+}
 
 /* Two Arguments, second as prefix but without prefix string as third argument */
-var_dump( extract($arr,EXTR_PREFIX_IF_EXISTS) );
+try {
+    var_dump( extract($arr,EXTR_PREFIX_IF_EXISTS) );
+} catch (\Error $e) {
+    echo $e->getMessage() . "\n";
+}
 
 echo "Done\n";
 ?>
@@ -20,13 +34,7 @@ echo "Done\n";
 *** Testing Error Conditions ***
 
 Notice: A non well formed numeric value encountered in %s on line %d
-
-Warning: extract(): Invalid extract type in %s on line %d
-NULL
-
-Warning: extract(): Invalid extract type in %s on line %d
-NULL
-
-Warning: extract(): specified extract type requires the prefix parameter in %s on line %d
-NULL
+Invalid extract type
+Invalid extract type
+Specified extract type requires the prefix parameter
 Done
diff --git a/ext/standard/tests/array/extract_error_variation1.phpt b/ext/standard/tests/array/extract_error_variation1.phpt
new file mode 100644 (file)
index 0000000..ec3078a
--- /dev/null
@@ -0,0 +1,14 @@
+--TEST--
+Test extract() function - error condition - Invalid prefix.
+--FILE--
+<?php
+$a = ["1" => "one", "2" => "two", "3" => "three", "4" => "four", "5" => "five"];
+
+try {
+    extract($a, EXTR_PREFIX_ALL, '85bogus');
+} catch (\Error $e) {
+    echo $e->getMessage();
+}
+?>
+--EXPECT--
+Prefix is not a valid identifier