Hi everyone,
Matteo Beccati wrote:
Antony Dovgal wrote:
MFH:
- Fixed pcntl_signal() returning NULL when passing wrong parameters
"Fixed"? Since when standard behavior is "broken"? What's wrong with
that?
Sorry about that. I've reverted a few minutes later after Arnaud pointed
me to the standard behaviour.
Some background: I mostly poked into PDO source files which apparently
are using the wrong behaviour and I assumed that it was the default.
After a quick discussion with Lukas and Antony on IRC, I wrote a small
script to detect how many functions/methods are returning false after
failing to validate the arguments: you 'll find the result for PHP_5_3
attached.
The regex I've used is not perfect, but if you think it's somewhat
accurate we might want to decide fixing in PHP 5.3 as there aren't many
places that need to be fixed.
Cheers
--
Matteo Beccati
OpenX - http://www.openx.org
Script
======
<?php
$str = file_get_contents($argv[1]);
if (preg_match_all('/\(FAILURE ==
zend_parse_parameters\(.*\r?\n[^}]*RETURN_FALSE/', $str, $m)) {
echo "{$argv[1]}: ".count($m[0])."\n";
}
Summary
=======
./ext/bz2/bz2.c: 2
./ext/com_dotnet/com_com.c: 2
./ext/pdo/pdo_dbh.c: 7
./ext/pdo/pdo_stmt.c: 9
./ext/pdo_pgsql/pgsql_driver.c: 2
./ext/pdo_sqlite/sqlite_driver.c: 2
./ext/interbase/ibase_blobs.c: 8
./ext/interbase/ibase_service.c: 1
./ext/interbase/interbase.c: 2
./ext/sysvsem/sysvsem.c: 1
./ext/readline/readline.c: 2
./ext/standard/streamsfuncs.c: 1
Details
=======
./ext/bz2/bz2.c
---------------
(FAILURE == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r|l", &bz, &len))
{
RETURN_FALSE
(FAILURE == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|l", &source,
&source_len, &small)) {
RETURN_FALSE
./ext/com_dotnet/com_com.c
--------------------------
(FAILURE == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "Oo|z/",
&object, php_com_variant_class_entry, &sinkobject,
&sink)) {
RETURN_FALSE
(FAILURE == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "z/|s!b", &arg1,
&ifacename,
&ifacelen, &wantsink)) {
RETURN_FALSE
./ext/pdo/pdo_dbh.c
-------------------
(FAILURE == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|a", &statement,
&statement_len, &options)) {
RETURN_FALSE
(FAILURE == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "lz", &attr,
&value)) {
RETURN_FALSE
(FAILURE == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &attr)) {
RETURN_FALSE
(FAILURE == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &statement,
&statement_len)) {
RETURN_FALSE
(FAILURE == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|s!", &name,
&namelen)) {
RETURN_FALSE
(FAILURE == zend_parse_parameters(1 TSRMLS_CC, "s", &statement,
&statement_len)) {
RETURN_FALSE
(FAILURE == zend_parse_parameters(1 TSRMLS_CC, "s|l", &str, &str_len,
¶mtype)) {
RETURN_FALSE
./ext/pdo/pdo_stmt.c
--------------------
(FAILURE == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|a!",
&input_params)) {
RETURN_FALSE
(FAILURE == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|lll", &how,
&ori, &off)) {
RETURN_FALSE
(FAILURE == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|sz",
&class_name, &class_name_len, &ctor_args)) {
RETURN_FALSE
(FAILURE == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|l", &col_n)) {
RETURN_FALSE
(FAILURE == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|lzz", &how,
&arg2, &ctor_args)) {
RETURN_FALSE
(FAILURE == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "sz/|l",
¶m.name,
¶m.namelen, ¶m.parameter,
¶m.param_type)) {
RETURN_FALSE
(FAILURE == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "lz!", &attr,
&value)) {
RETURN_FALSE
(FAILURE == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &attr)) {
RETURN_FALSE
(FAILURE == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &colno)) {
RETURN_FALSE
./ext/pdo_pgsql/pgsql_driver.c
------------------------------
(FAILURE == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|s",
&oidstr, &oidstrlen, &modestr, &modestrlen)) {
RETURN_FALSE
(FAILURE == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s",
&oidstr, &oidlen)) {
RETURN_FALSE
./ext/pdo_sqlite/sqlite_driver.c
--------------------------------
(FAILURE == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "sz|l",
&func_name, &func_name_len, &callback, &argc)) {
RETURN_FALSE
(FAILURE == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "szz|l",
&func_name, &func_name_len, &step_callback,
&fini_callback, &argc)) {
RETURN_FALSE
./ext/interbase/ibase_blobs.c
-----------------------------
(FAILURE == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|r", &link)) {
RETURN_FALSE
(FAILURE == zend_parse_parameters(1 TSRMLS_CC, "s", &blob_id, &blob_id_len)) {
RETURN_FALSE
(FAILURE == zend_parse_parameters(2 TSRMLS_CC, "rs", &link, &blob_id,
&blob_id_len)) {
RETURN_FALSE
(FAILURE == zend_parse_parameters(1 TSRMLS_CC, "s", &blob_id, &blob_id_len)) {
RETURN_FALSE
(FAILURE == zend_parse_parameters(2 TSRMLS_CC, "rs", &link, &blob_id,
&blob_id_len)) {
RETURN_FALSE
(FAILURE == zend_parse_parameters(1 TSRMLS_CC, "s", &blob_id, &blob_id_len)) {
RETURN_FALSE
(FAILURE == zend_parse_parameters(2 TSRMLS_CC, "rs", &link, &blob_id,
&blob_id_len)) {
RETURN_FALSE
(FAILURE == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r|r",
(ZEND_NUM_ARGS()-1) ? &link : &file, &file)) {
RETURN_FALSE
./ext/interbase/ibase_service.c
-------------------------------
(FAILURE == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC,
(operation == isc_action_svc_delete_user) ? "rs" :
"rss|sss",
&res, &args[0], &args_len[0], &args[1], &args_len[1],
&args[2], &args_len[2],
&args[3], &args_len[3], &args[4], &args_len[4])) {
RETURN_FALSE
./ext/interbase/interbase.c
---------------------------
(FAILURE == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|ssssllsl",
&args[DB], &len[DB], &args[USER], &len[USER],
&args[PASS], &len[PASS],
&args[CSET], &len[CSET], &largs[BUF], &largs[DLECT],
&args[ROLE], &len[ROLE],
&largs[SYNC])) {
RETURN_FALSE
(FAILURE == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|lr",
&generator, &gen_len,
&inc, &link)) {
RETURN_FALSE
./ext/sysvsem/sysvsem.c
-----------------------
(FAILURE == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l|lll", &key,
&max_acquire, &perm, &auto_release)) {
RETURN_FALSE
./ext/readline/readline.c
-------------------------
(FAILURE == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s!", &prompt,
&prompt_len)) {
RETURN_FALSE
(FAILURE == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "z", &arg)) {
RETURN_FALSE
./ext/standard/streamsfuncs.c
-----------------------------
(FAILURE == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "lll",
&domain, &type, &protocol)) {
RETURN_FALSE
--
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php