Hello developers. I saw some days ago that there is need in rewriting of check_parameters.php to be less false-positive and so on...
So i wrote new version - based on state machines _and_ regex. Base checks are the same, only reporting is improved. There is simple comparision: -- on old version my php-5.2.5 source old util gives ~180 problems (excluding optional, non optional params initialization, reporting_level is setted up to 5): # php ./scripts/dev/check_parameters.php /xxxx/php5.2-200803061530 | grep -iv 'optional var not initialized' | grep -iv 'not optional var is initialized' > ./old1.log # wc -l ./old1.log 181 ./old1.log new gives ~150 problems :) # php /check_code.php -v 5 /xxxx/php5.2-200803061530 |grep -iv 'OPTIONAL var IS NOT' | grep -iv 'NOT OPTIONAL var IS initialized' > /new1.log # wc -l /new1.log 147 /new1.log Some problems are unavoided: - external variable definition (~60) * 'php_com_variant_class_entry' - 11 reports * 'date_ce_timezone' - 2 reports * 'oci_lob_class_entry_ptr' - 26 reports * 'text**' - 7 reports * 'oci_coll_class_entry_ptr' - 10 reports * 'zend_ce_traversable' - 3 reports * others ... - too complex cases of parsing ( can be fixed by hacks but it's wrong...) (~5) , others will be solved by more correct parsing and some will be fixed in source code (i think :) ), for example: ext/iconv/iconv.c [] iconv_mime_encode : field_value: expected "char**" but got "const char**" [3] ext/mysqli/mysqli_nonapi.c [] mysqli_connect : hostname_len: expected "int*" but got "unsigned int*" [2] ext/mysqli/mysqli_nonapi.c [] mysqli_connect : username_len: expected "int*" but got "unsigned int*"[4] ext/mysqli/mysqli_nonapi.c [] mysqli_connect : passwd_len: expected "int*" but got "unsigned int*" [6] ext/mysqli/mysqli_nonapi.c [] mysqli_connect : dbname_len: expected "int*" but got "unsigned int*" [8] ext/mysqli/mysqli_nonapi.c [] mysqli_connect : socket_len: expected "int*" but got "unsigned int*" [11] ext/openssl/openssl.c [] openssl_seal : the '/' specifier cannot be applied to 'a' ext/pgsql/pgsql.c [] pg_field_table : the '!' specifier cannot be applied to 'b' ext/pgsql/pgsql.c [] pg_copy_from : the '/' specifier cannot be applied to 's' ext/pgsql/pgsql.c [] pg_meta_data : table_name_len: expected "int*" but got "uint*" [3] ext/pgsql/pgsql.c [] pg_convert : option: expected "long*" but got "ulong*" [5] ext/pgsql/pgsql.c [] pg_insert : option: expected "long*" but got "ulong*" [5] ext/pgsql/pgsql.c [] pg_update : option: expected "long*" but got "ulong*" [6] ext/pgsql/pgsql.c [] pg_delete : option: expected "long*" but got "ulong*" [5] ext/pgsql/pgsql.c [] pg_select : option: expected "long*" but got "ulong*" [5] ext/standard/streamsfuncs.c [] stream_socket_client : the '!' specifier cannot be applied to 'd' , so i believe final number will be ~70-80 ... There are also need to do: * write tests * rewrite dropping comments from code * return missed current_line function * replace other regexes by statemachines where it is possible * improve more maintainability * write docu * smth else ? So it's not last version... But please check it if you have time. You can see utility on [1] (I don't creare patch because of it is the same as downloading new version - too many changes) Also i have questions: 1. in many problem reports there are unsigned int (or uint, or ulong -> long or smth else) to int assigning. Is it safe ? If yes, then i need to process this in code 2. There are really many problem reports about "optional var is not initialized" Is there a requrement for reporting about it ? And why ? 3. There are really many problem reports about "not optional var is initialized" Also in most part of these cases not optional var is inialized by null value. Why is this requrement ? And why ? 4. there is code like: // separate_zval_if_not_ref case '/': //FIXME could not understand from why it so ???? if ( !in_array($prev_char, array('r', 'z')) ) { self::error("the '/' specifier cannot be applied to '$prev_char'"); } break; Why ? In readme.parameter_parsing_api docu i can't find any related to it information. Links: [1] http://sawoy.mylivepage.com/file/?fileid=2830 -- Greetings, Alexandr Savchuk -- PHP Internals - PHP Runtime Development Mailing List To unsubscribe, visit: http://www.php.net/unsub.php