Yes, i understand.
It was interesting for me -
how i can decrease false positive and others by improvings on current script.

If there will be not GSoC participant for this project,
possibly i can do it.


Also base questions, which will be asked in any case, are still alive:

>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.

2008/3/12, Nuno Lopes <[EMAIL PROTECTED]>:
> Hi,
>
>  Thanks for working on this. However I don't think more effort should be
>  wasted with this script. It's a bogus approach to the problem and it will
>  always generate many false-positives (disclaimer: I'm the author of the
>  original script and it was like a POC).
>  Thus my idea is to move along to use a real C/C++ front-end and perform the
>  things correctly. For example, the new LLVM's clang frontend is really easy
>  to work with. That's why I've proposed this for a gsoc project. It's fairly
>  easy for someone with little compiler knowledge, yet it gives enough work to
>  be a gsoc project.
>
>  Regards,
>
> Nuno
>
>
>
>  ----- Original Message -----
>  From: "Alexandr Savchuk" <[EMAIL PROTECTED]>
>  To: <internals@lists.php.net>
>  Sent: Tuesday, March 11, 2008 5:00 AM
>  Subject: [PHP-DEV] new version of check_parameters.php
>
>
>  > 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
>
>


-- 
Greetings,
Alexandr Savchuk

-- 
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to