]> granicus.if.org Git - php/commitdiff
Fix arg/func info
authorNikita Popov <nikita.ppv@gmail.com>
Tue, 21 Jul 2020 12:58:35 +0000 (14:58 +0200)
committerNikita Popov <nikita.ppv@gmail.com>
Tue, 21 Jul 2020 13:00:33 +0000 (15:00 +0200)
 * mysqli_get_server_info() cannot return null. The underlying API
   is infallible.
 * mysqli_select_db() func info is redundant.
 * mb_detect_order() can only return array|true, not array|false.

Also make the func_info.phpt test that is supposed to catch these
kinds of issues actually work.

ext/mysqli/mysqli.stub.php
ext/mysqli/mysqli_api.c
ext/mysqli/mysqli_arginfo.h
ext/opcache/Optimizer/zend_func_info.c
ext/opcache/tests/func_info.phpt

index e8af0485dc02edc5168250a0e5396f98015c3505..5e73f34fa0aeea20cdce46e6850f27b4e57049c0 100644 (file)
@@ -609,7 +609,7 @@ function mysqli_get_host_info(mysqli $mysqli_link): string {}
 
 function mysqli_get_proto_info(mysqli $mysqli_link): int {}
 
-function mysqli_get_server_info(mysqli $mysqli_link): ?string {}
+function mysqli_get_server_info(mysqli $mysqli_link): string {}
 
 function mysqli_get_server_version(mysqli $mysqli_link): int {}
 
index 8dbbd45c8eb29b4cb59c614d74d2644f50e8dd4a..76f336c00448cd3bba97464cdb2bf3cab5ba59b2 100644 (file)
@@ -1403,17 +1403,13 @@ PHP_FUNCTION(mysqli_get_server_info)
 {
        MY_MYSQL        *mysql;
        zval            *mysql_link = NULL;
-       const char      *info;
 
        if (zend_parse_method_parameters(ZEND_NUM_ARGS(), getThis(), "O", &mysql_link, mysqli_link_class_entry) == FAILURE) {
                RETURN_THROWS();
        }
        MYSQLI_FETCH_RESOURCE_CONN(mysql, mysql_link, MYSQLI_STATUS_VALID);
 
-       info = mysql_get_server_info(mysql->mysql);
-       if (info) {
-               RETURN_STRING(info);
-       }
+       RETURN_STRING(mysql_get_server_info(mysql->mysql));
 }
 /* }}} */
 
index cacc5d1d81d23d8cd29767f7f36cbcf12c186ba9..3b2b995dc537b42e0c964a760ce3fab34b9256ec 100644 (file)
@@ -1,5 +1,5 @@
 /* This is a generated file, edit the .stub.php file instead.
- * Stub hash: 49567a0e831c0a484aaf2c2d213ad24109f2639b */
+ * Stub hash: cde1bbb449c6adae7a99c7df3e9d290d501e18be */
 
 ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_mysqli_affected_rows, 0, 1, MAY_BE_LONG|MAY_BE_STRING)
        ZEND_ARG_OBJ_INFO(0, mysql_link, mysqli, 0)
@@ -162,9 +162,7 @@ ZEND_END_ARG_INFO()
 
 #define arginfo_mysqli_get_proto_info arginfo_mysqli_field_count
 
-ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_mysqli_get_server_info, 0, 1, IS_STRING, 1)
-       ZEND_ARG_OBJ_INFO(0, mysqli_link, mysqli, 0)
-ZEND_END_ARG_INFO()
+#define arginfo_mysqli_get_server_info arginfo_mysqli_get_host_info
 
 #define arginfo_mysqli_get_server_version arginfo_mysqli_field_count
 
@@ -175,7 +173,9 @@ ZEND_END_ARG_INFO()
 ZEND_BEGIN_ARG_WITH_RETURN_OBJ_TYPE_MASK_EX(arginfo_mysqli_init, 0, 0, mysqli, MAY_BE_FALSE)
 ZEND_END_ARG_INFO()
 
-#define arginfo_mysqli_info arginfo_mysqli_get_server_info
+ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_mysqli_info, 0, 1, IS_STRING, 1)
+       ZEND_ARG_OBJ_INFO(0, mysqli_link, mysqli, 0)
+ZEND_END_ARG_INFO()
 
 ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_mysqli_insert_id, 0, 1, MAY_BE_LONG|MAY_BE_STRING)
        ZEND_ARG_OBJ_INFO(0, mysqli_link, mysqli, 0)
@@ -377,7 +377,7 @@ ZEND_END_ARG_INFO()
 
 #define arginfo_mysqli_stmt_sqlstate arginfo_mysqli_stmt_error
 
-#define arginfo_mysqli_sqlstate arginfo_mysqli_get_server_info
+#define arginfo_mysqli_sqlstate arginfo_mysqli_info
 
 ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_mysqli_ssl_set, 0, 6, _IS_BOOL, 0)
        ZEND_ARG_OBJ_INFO(0, mysql_link, mysqli, 0)
index 1affffbee6349b5e03e73a55cdbeb4fd6f8c1d1c..94a161a136eee5b288b263cc9f82946b32e07b27 100644 (file)
@@ -489,7 +489,6 @@ static const func_info_t func_infos[] = {
        F0("mysqli_stmt_data_seek",                                     MAY_BE_NULL | MAY_BE_FALSE),
        F1("mysqli_stmt_insert_id",                                     MAY_BE_LONG | MAY_BE_STRING),
        F1("mysqli_stmt_num_rows",                                      MAY_BE_LONG | MAY_BE_STRING),
-       F0("mysqli_select_db",                                          MAY_BE_FALSE | MAY_BE_TRUE),
        F1("mysqli_sqlstate",                                           MAY_BE_NULL | MAY_BE_STRING),
        F0("mysqli_ssl_set",                                            MAY_BE_TRUE),
        F1("mysqli_stat",                                                       MAY_BE_FALSE | MAY_BE_STRING),
@@ -523,7 +522,7 @@ static const func_info_t func_infos[] = {
        F1("mb_internal_encoding",                  MAY_BE_FALSE | MAY_BE_TRUE | MAY_BE_STRING),
        F1("mb_http_input",                         MAY_BE_FALSE | MAY_BE_STRING| MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_LONG | MAY_BE_ARRAY_OF_STRING),
        F1("mb_http_output",                        MAY_BE_FALSE | MAY_BE_TRUE | MAY_BE_STRING),
-       F1("mb_detect_order",                       MAY_BE_FALSE | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_LONG | MAY_BE_ARRAY_OF_STRING),
+       F1("mb_detect_order",                       MAY_BE_TRUE | MAY_BE_ARRAY | MAY_BE_ARRAY_KEY_LONG | MAY_BE_ARRAY_OF_STRING),
        F1("mb_substitute_character",               MAY_BE_FALSE | MAY_BE_TRUE | MAY_BE_LONG | MAY_BE_STRING),
        F1("mb_output_handler",                     MAY_BE_STRING),
        F1("mb_preferred_mime_name",                MAY_BE_FALSE | MAY_BE_STRING),
index 71843a86a27b6b4e86ad3ad7923d07bdcb313ccf..f5e4b5b182783070024ca7176e723509357bc7b2 100644 (file)
@@ -13,7 +13,10 @@ $contents = "<?php\n";
 
 $contents .= "function test() {\n";
 foreach (get_defined_functions()["internal"] as $function) {
-    $contents .= "    {$function}();\n";
+    if (in_array($function, ["extract", "compact", "get_defined_vars"])) {
+        continue;
+    }
+    $contents .= "    \$result = {$function}();\n";
 }
 $contents .= "}\n";