summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNikita Popov <nikita.ppv@gmail.com>2020-07-21 16:21:14 +0200
committerNikita Popov <nikita.ppv@gmail.com>2020-10-14 16:26:09 +0200
commit08323764113e14954b16b1c6286237d3463e7094 (patch)
treedcfb50b5eef456a2db470fc827477a37cd350406
parent5e34744fd99a4d72a8d05de59d5bcc3d7d47d5b1 (diff)
downloadphp-git-08323764113e14954b16b1c6286237d3463e7094.tar.gz
More arginfo/zpp verification
Run all functions with a varying number of null arguments, which helps us flush out all kinds of bugs. Closes GH-5881.
-rw-r--r--Zend/tests/arginfo_zpp_mismatch.phpt91
1 files changed, 75 insertions, 16 deletions
diff --git a/Zend/tests/arginfo_zpp_mismatch.phpt b/Zend/tests/arginfo_zpp_mismatch.phpt
index 39a1742743..cd37fbf33a 100644
--- a/Zend/tests/arginfo_zpp_mismatch.phpt
+++ b/Zend/tests/arginfo_zpp_mismatch.phpt
@@ -4,10 +4,83 @@ Test that there is no arginfo/zpp mismatch
<?php
function test($function) {
+ if (false
+ /* expect input / hang */
+ || $function === 'readline'
+ || $function === 'readline_read_history'
+ || $function === 'readline_write_history'
+ /* intentionally violate invariants */
+ || $function === 'zend_create_unterminated_string'
+ || $function === 'zend_test_array_return'
+ || $function === 'zend_leak_bytes'
+ /* mess with output */
+ || (is_string($function) && str_starts_with($function, 'ob_'))
+ || $function === 'output_add_rewrite_var'
+ || $function === 'error_log'
+ /* may spend a lot of time waiting for connection timeouts */
+ || (is_string($function) && str_contains($function, 'connect'))
+ || (is_string($function) && str_starts_with($function, 'snmp'))
+ || (is_array($function) && get_class($function[0]) === mysqli::class
+ && in_array($function[1], ['__construct', 'connect', 'real_connect']))
+ /* misc */
+ || $function === 'mail'
+ || $function === 'mb_send_mail'
+ || $function === 'pcntl_fork'
+ || $function === 'posix_kill'
+ || $function === 'posix_setrlimit'
+ || $function === 'sapi_windows_generate_ctrl_event'
+ || $function === 'imagegrabscreen'
+ ) {
+ return;
+ }
+ if ($function[0] instanceof SoapServer) {
+ /* TODO: Uses fatal errors */
+ return;
+ }
+
+ ob_start();
+ if (is_string($function)) {
+ echo "Testing $function\n";
+ } else {
+ echo "Testing " . get_class($function[0]) . "::$function[1]\n";
+ }
+ try {
+ @$function();
+ } catch (Throwable) {
+ }
+ try {
+ @$function(null);
+ } catch (Throwable) {
+ }
+ try {
+ @$function(null, null);
+ } catch (Throwable) {
+ }
+ try {
+ @$function(null, null, null);
+ } catch (Throwable) {
+ }
+ try {
+ @$function(null, null, null, null);
+ } catch (Throwable) {
+ }
+ try {
+ @$function(null, null, null, null, null);
+ } catch (Throwable) {
+ }
+ try {
+ @$function(null, null, null, null, null, null);
+ } catch (Throwable) {
+ }
+ try {
+ @$function(null, null, null, null, null, null, null);
+ } catch (Throwable) {
+ }
try {
@$function(null, null, null, null, null, null, null, null);
} catch (Throwable) {
}
+ ob_end_clean();
}
foreach (get_defined_functions()["internal"] as $function) {
@@ -29,20 +102,6 @@ foreach (get_declared_classes() as $class) {
// var_dump() and debug_zval_dump() print all arguments
?>
+===DONE===
--EXPECT--
-NULL
-NULL
-NULL
-NULL
-NULL
-NULL
-NULL
-NULL
-NULL
-NULL
-NULL
-NULL
-NULL
-NULL
-NULL
-NULL
+===DONE===