mirror of
https://github.com/php/php-src.git
synced 2024-11-30 21:35:36 +08:00
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.
This commit is contained in:
parent
5e34744fd9
commit
0832376411
@ -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===
|
||||
|
Loading…
Reference in New Issue
Block a user