Newsgroups: php.internals Path: news.php.net Xref: news.php.net php.internals:36088 Return-Path: Mailing-List: contact internals-help@lists.php.net; run by ezmlm Delivered-To: mailing list internals@lists.php.net Received: (qmail 55180 invoked from network); 11 Mar 2008 05:01:04 -0000 Received: from unknown (HELO lists.php.net) (127.0.0.1) by localhost with SMTP; 11 Mar 2008 05:01:04 -0000 Authentication-Results: pb1.pair.com smtp.mail=a.u.savchuk@gmail.com; spf=pass; sender-id=pass Authentication-Results: pb1.pair.com header.from=a.u.savchuk@gmail.com; sender-id=pass; domainkeys=bad Received-SPF: pass (pb1.pair.com: domain gmail.com designates 72.14.220.154 as permitted sender) DomainKey-Status: bad X-DomainKeys: Ecelerity dk_validate implementing draft-delany-domainkeys-base-01 X-PHP-List-Original-Sender: a.u.savchuk@gmail.com X-Host-Fingerprint: 72.14.220.154 fg-out-1718.google.com Received: from [72.14.220.154] ([72.14.220.154:46806] helo=fg-out-1718.google.com) by pb1.pair.com (ecelerity 2.1.1.9-wez r(12769M)) with ESMTP id B5/47-15337-E0216D74 for ; Tue, 11 Mar 2008 00:01:03 -0500 Received: by fg-out-1718.google.com with SMTP id 22so1830030fge.23 for ; Mon, 10 Mar 2008 22:01:00 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:received:received:message-id:date:from:to:subject:mime-version:content-type:content-transfer-encoding:content-disposition; bh=ZWW+/JNnuCnb6RPv1o0/hYAuBlhIciJFRiwf/75TX/k=; b=f1rbi6higqTOlZo+88q4N7bbqV/QJOAQOhvfiyUq8l6OXiSHmpxjuttMkdVOxIwbpdW8Rphse9Ojp8syZaDYWfZtR9YSVB06w4XzXoAOLhY2QPBi17+tR5/itQRZtcsR3nYC2iElB8XGY3k8eNy0ZCJ3LxXFZ7gpEKcy7ItUlQU= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=message-id:date:from:to:subject:mime-version:content-type:content-transfer-encoding:content-disposition; b=orH3CiqkwnpLr4ZZoDFRU6rzNPnAtCw+ErmebaStq05nKUN+TtbWf6t5poICmkf6qyQxF6QllhQzeq3+7pr0P3bIjSU1C3d7T/J+vD518Iny9etk3JqVpJkVJ+XLbYUlGAGT4B4awIbEabNvgCl/KAYhYLm75V6ZxNNQ07uatAM= Received: by 10.82.174.20 with SMTP id w20mr15158730bue.14.1205211659633; Mon, 10 Mar 2008 22:00:59 -0700 (PDT) Received: by 10.82.170.15 with HTTP; Mon, 10 Mar 2008 22:00:59 -0700 (PDT) Message-ID: <8cd3358e0803102200r2047ed33n99766953258de66b@mail.gmail.com> Date: Tue, 11 Mar 2008 11:00:59 +0600 To: internals@lists.php.net MIME-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Content-Disposition: inline Subject: new version of check_parameters.php From: a.u.savchuk@gmail.com ("Alexandr Savchuk") 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