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,
                        &paramtype)) {
                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", 
&param.name,
                                &param.namelen, &param.parameter, 
&param.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

Reply via email to