--- coder_review/coder_review.info Base (1.5) +++ coder_review/coder_review.info Locally Modified (Based On 1.5) @@ -16,6 +16,7 @@ files[] = includes/coder_review_security.inc files[] = includes/coder_review_sql.inc files[] = includes/coder_review_style.inc +files[] = includes/coder_review_php53.inc files[] = tests/coder_review_test_case.tinc files[] = tests/coder_review_6x.test files[] = tests/coder_review_7x.test @@ -25,3 +26,4 @@ files[] = tests/coder_review_security.test files[] = tests/coder_review_sql.test files[] = tests/coder_review_style.test +files[] = tests/coder_review_php53.test --- coder_review/includes/coder_review_php53.inc No Base Revision +++ coder_review/includes/coder_review_php53.inc Locally New @@ -0,0 +1,289 @@ + 'regex', + '#value' => '[\s\(]call_user_method\s*\([\s*\$\']', + '#source' => 'allphp', + '#warning_callback' => '_coder_review_php53_call_user_method_warning', + ), + array( + '#type' => 'regex', + '#value' => '[\s\(]call_user_method_array\s*\([\s*\$\']', + '#source' => 'allphp', + '#warning_callback' => '_coder_review_php53_call_user_method_array_warning', + ), + array( + '#type' => 'regex', + '#value' => '[\s\(]define_syslog_variables\s*\(\);', + '#source' => 'allphp', + '#warning_callback' => '_coder_review_php53_define_syslog_variables_warning', + ), + array( + '#type' => 'regex', + '#value' => '[\s\(]ereg\s*\([\s*\$\']', + '#source' => 'allphp', + '#warning_callback' => '_coder_review_php53_ereg_warning', + ), + array( + '#type' => 'regex', + '#value' => '[\s\(]ereg_replace\s*\([\s*\$\']', + '#source' => 'allphp', + '#warning_callback' => '_coder_review_php53_ereg_replace_warning', + ), + array( + '#type' => 'regex', + '#value' => '[\s\(]eregi\s*\([\s*\$\']', + '#source' => 'allphp', + '#warning_callback' => '_coder_review_php53_eregi_warning', + ), + array( + '#type' => 'regex', + '#value' => '[\s\(]eregi_replace\s*\([\s*\$\']', + '#source' => 'allphp', + '#warning_callback' => '_coder_review_php53_eregi_replace_warning', + ), + array( + '#type' => 'regex', + '#value' => '[\s\(](set_magic_quotes_runtime|magic_quotes_runtime)\s*\(\s*[0-9\$\ ]', + '#source' => 'allphp', + '#warning_callback' => '_coder_review_php53_magic_quotes_runtime_warning', + ), + array( + '#type' => 'regex', + '#value' => '[\s\(](session_register|session_unregister|session_is_registered)\s*\([\s*\$\']', + '#source' => 'allphp', + '#warning_callback' => '_coder_review_php53_session_re_un_is_warning', + ), + array( + '#type' => 'regex', + '#value' => '[\s\(]set_socket_blocking\s*\([\s*\$\']', + '#source' => 'allphp', + '#warning_callback' => '_coder_review_php53_set_socket_blocking_warning', + ), + array( + '#type' => 'regex', + '#value' => '[\s\(]split\s*\([\s*\$\']', + '#never' => '[a-z|A-Z|0-9|\-\_]split', + '#source' => 'allphp', + '#warning_callback' => '_coder_review_php53_split_warning', + ), + array( + '#type' => 'regex', + '#value' => '[\s\(]spliti\s*\([\s*\$\']', + '#never' => '[a-z|A-Z|0-9|\-\_]spliti', + '#source' => 'allphp', + '#warning_callback' => '_coder_review_php53_spliti_warning', + ), + array( + '#type' => 'regex', + '#value' => '[\s\(]sql_regcase\s*\([\s*\$\']', + '#source' => 'allphp', + '#warning_callback' => '_coder_review_php53_sql_regcase_warning', + ), + array( + '#type' => 'regex', + '#value' => '[\s\(]mysql_db_query\s*\([\s*\$\']', + '#source' => 'allphp', + '#warning_callback' => '_coder_review_php53_mysql_db_query_warning', + ), + array( + '#type' => 'regex', + '#value' => '[\s\(]mysql_escape_string\s*\([\s*\$\']', + '#source' => 'allphp', + '#warning_callback' => '_coder_review_php53_mysql_escape_string_warning', + ), + + ); + $review = array( + '#title' => 'Upgrade to D7: Drupal PHP 5.3 Checks', + '#link' => 'http://drupal.org/node/28984', + '#rules' => $rules, + '#severity' => 'critical', + '#description' => t('Usage of PHP 5.3 deprecated functions in the code.'), + ); + return array('php53' => $review); +} + + +/** + * Define the rule callbacks. + */ + +/* function _coder_review_php53_callback(&$coder_args, $review, $rule, $lines, &$results) { + if (!isset($coder_args['#tokens'])) { + $source = implode('', $lines); + $coder_args['#tokens'] = token_get_all($source); + } +} */ + +/** + * Define the warning callbacks. + */ + +function _coder_review_php53_call_user_method_warning() { + return t('!call_user_method() is deprectated. use !call_user_func() instead.', + array( + '!call_user_method()' => l('call_user_method()', 'http://www.php.net/manual/en/function.call-user-method.php'), + '!call_user_func()' => l('call_user_func()', 'http://www.php.net/manual/en/function.call-user-func.php'), + ) + ); +} + +function _coder_review_php53_call_user_method_array_warning() { + return t('!call_user_method_array() function is deprectated. use !call_user_func_array() instead.', + array( + '!call_user_method_array()' => l('call_user_method_array()', 'http://www.php.net/manual/en/function.call-user-method_array.php'), + '!call_user_func_array()' => l('call_user_func()', 'http://www.php.net/manual/en/function.call-user-func.php'), + ) + ); +} + +function _coder_review_php53_define_syslog_variables_warning() { + return t('!define_syslog_variables() function is deprectated.', + array( + '!define_syslog_variables()' => l('define_syslog_variables()', 'http://www.php.net/manual/en/function.define-syslog-variables.php'), + ) + ); +} + +function _coder_review_php53_dl_warning() { + return t('!dl() function is deprectated.', + array( + '!dl()' => l('dl()', 'http://www.php.net/manual/en/function.dl.php'), + ) + ); +} + +function _coder_review_php53_ereg_warning() { + return t('!ereg() is deprectated. Use !preg_match() instead.', + array( + '!ereg()' => l('ereg()', 'http://www.php.net/manual/en/function.ereg.php'), + '!preg_match()' => l('preg_match()', 'http://www.php.net/manual/en/function.preg-match.php'), + ) + ); +} + +function _coder_review_php53_ereg_replace_warning() { + return t('!ereg_replace() is deprectated. Use !preg_replace() instead.', + array( + '!ereg_replace()' => l('ereg_replace()', 'http://www.php.net/manual/en/function.ereg-replace.php'), + '!preg_match()' => l('preg_match()', 'http://www.php.net/manual/en/function.preg-match.php'), + ) + ); +} + + +function _coder_review_php53_eregi_warning() { + return t('!eregi() is deprectated. Use !preg_match() with i modifier instead.', + array( + '!eregi()' => l('eregi()', 'http://www.php.net/manual/en/function.eregi.php'), + '!preg_match()' => l('preg_match()', 'http://www.php.net/manual/en/function.preg-match.php'), + ) + ); +} + + +function _coder_review_php53_eregi_replace_warning() { + return t('!eregi_replace() is deprectated. Use !preg_replace() with the i modifier instead', + array( + '!eregi_replace()' => l('ereg_replace()', 'http://www.php.net/manual/en/function.eregi_replace.php'), + '!preg_match()' => l('preg_match()', 'http://www.php.net/manual/en/function.preg-match.php'), + ) + ); +} + +function _coder_review_php53_magic_quotes_runtime_warning() { + return t('!set_magic_quotes_runtime() and its alias !magic_quotes_runtime() are deprectated.', + array( + '!magic_quotes_runtime()' => l('magic_quotes_runtime()', 'http://www.php.net/manual/en/function.magic-quotes-runtime.php'), + '!set_magic_quotes_runtime()' => l('set_magic_quotes_runtime()', 'http://www.php.net/manual/en/function.magic-quotes-runtime.php'), + ) + ); +} + +function _coder_review_php53_session_reg_unreg_is_warning() { + return t('!session_register(), !session_unregister() and !session_is_registered() functions are deprecated. use the !$_SESSION superglobal instead.', + array( + '!session_register()' => l('session_register()', 'http://www.php.net/manual/en/function.session-register.php'), + '!session_unregister()' => l('session_unregister()', 'http://www.php.net/manual/en/function.session-unregister.php'), + '!session_is_registered()' => l('session_is_registered()', 'http://www.php.net/manual/en/function.session-is-registered.php'), + '!$_SESSION' => l('$_SESSION', 'http://www.php.net/manual/en/reserved.variables.session.php'), + ) + ); +} + +function _coder_review_php53_set_socket_blocking_warning() { + return t('!set_socket_blocking() alias is deprecated. use !stream_set_blocking() instead.', + array( + '!set_socket_blocking()' => l('set_socket_blocking()', 'http://www.php.net/manual/en/function.set-socket-blocking.php'), + '!stream_set_blocking()' => l('stream_set_blocking()', 'http://www.php.net/manual/en/function.stream-set-blocking.php'), + ) + ); +} + +function _coder_review_php53_split_warning() { + return t('!split() function is deprecated. use !preg_split() instead.', + array( + '!split()' => l('split()', 'http://www.php.net/manual/en/function.split.php'), + '!preg_split()' => l('preg_split()', 'http://www.php.net/manual/en/function.preg-split.php'), + ) + ); +} + + +function _coder_review_php53_spliti_warning() { + return t('!spliti() function is deprecated. use !preg_split() with the i modifier instead.', + array( + '!spliti()' => l('split()', 'http://www.php.net/manual/en/function.spliti.php'), + '!preg_split()' => l('preg_split()', 'http://www.php.net/manual/en/function.preg-split.php'), + ) + ); +} + + +function _coder_review_php53_sql_regcase_warning() { + return t('!sql_regcase() function is deprecated.', + array( + '!sql_regcase()' => l('sql_regcase()', 'http://www.php.net/manual/en/function.sql-regcase.php'), + ) + ); +} + + +function _coder_review_php53_mysql_db_query_warning() { + return t('!mysql_db_query() function is deprecated. Use !mysql_select_db() and !mysql_query() instead.', + array( + '!mysql_db_query()' => l('mysql_db_query()', 'http://www.php.net/manual/en/function.mysql-db-query.php'), + '!mysql_select()' => l('mysql_select()', 'http://www.php.net/manual/en/function.mysql-select.php'), + '!mysql_query()' => l('mysql_query()', 'http://www.php.net/manual/en/function.mysql-query.php'), + ) + ); +} + + +function _coder_review_php53_mysql_escape_string_warning() { + return t('!mysql_escape_string() function is deprecated. Use !mysql_real_escape_string() instead.', + array( + '!mysql_escape_string()' => l('mysql_escape_string()', 'http://www.php.net/manual/en/function.mysql-escape-string.php'), + '!mysql_real_escape_string()' => l('mysql_real_escape_string()', 'http://www.php.net/manual/en/function.mysql-real-escape-string.php'), + ) + ); +} --- coder_review/tests/coder_review_php53.test No Base Revision +++ coder_review/tests/coder_review_php53.test Locally New @@ -0,0 +1,195 @@ + t('Coder PHP53 Tests'), + 'description' => t('Tests for the coder PHP53 review.'), + 'group' => t('Coder'), + ); + } + + function testPHP53CallUserMethod() { + $this->assertCoderReviewFail(' $test = call_user_method($method, $object);'); + $this->assertCoderReviewFail(' $test = call_user_method(\'method\', $object);'); + $this->assertCoderReviewFail(' call_user_method($method_name, $object)'); + $this->assertCoderReviewPass(' $test = re_call_user_method ($this'); + $this->assertCoderReviewPass(' $test = recall_user_method($this);'); + $this->assertCoderReviewPass(' when you use call_user_method() to do'); + $this->assertCoderReviewPass(' function call_user_method(string $method_name, $object)'); + } + + function testPHP53CallUserMethodArray() { + $this->assertCoderReviewFail(' $test = call_user_method_array( array($method, $object), $whatever);'); + $this->assertCoderReviewFail(' $test = call_user_method_array(\'method\', $object);'); + $this->assertCoderReviewFail(' call_user_method_array($method_name, $object)'); + $this->assertCoderReviewPass(' $test = re_call_user_method_array ($this'); + $this->assertCoderReviewPass(' $test = recall_user_method_array($this);'); + $this->assertCoderReviewPass(' when you use call_user_method_array() to do'); + $this->assertCoderReviewPass(' function call_user_method_array(string $method_name, $object)'); + } + + function testPHP53DefineSyslogVariables() { + $this->assertCoderReviewFail(' $test = define_syslog_variables();'); + $this->assertCoderReviewFail(' define_syslog_variables();'); + $this->assertCoderReviewPass(' $test = custom_define_syslog_variables();'); + $this->assertCoderReviewPass(' when you use define_syslog_variables() to do'); + $this->assertCoderReviewPass(' function define_syslog_variables() {'); + } + + function testPHP53Ereg() { + $this->assertCoderReviewFail(' $test = ereg( $this, $that);'); + $this->assertCoderReviewFail(' $test = ereg(\'pattern\', $that);'); + $this->assertCoderReviewFail(' ereg($patter, $string)'); + $this->assertCoderReviewPass(' $test = re_ereg ($this'); + $this->assertCoderReviewPass(' $test = reereg($this);'); + $this->assertCoderReviewPass(' when you use ereg() to do'); + $this->assertCoderReviewPass(' function ereg(string $pattern, string $text)'); + } + + function testPHP53EregReplace() { + $this->assertCoderReviewFail(' $test = ereg_replace( $this, $that, $it);'); + $this->assertCoderReviewFail(' $test = ereg_replace(\'pattern\', $that, $this);'); + $this->assertCoderReviewFail(' ereg_replace($patter, $string, $that)'); + $this->assertCoderReviewPass(' $test = re_ereg_replace ($this'); + $this->assertCoderReviewPass(' $test = reereg_replace($this);'); + $this->assertCoderReviewPass(' when you use ereg_replace() to do'); + $this->assertCoderReviewPass(' function ereg_replace(string $pattern, string $replacement, string $text)'); + } + + function testPHP53Eregi() { + $this->assertCoderReviewFail(' $test = eregi( $this, $that);'); + $this->assertCoderReviewFail(' $test = eregi(\'pattern\', $that);'); + $this->assertCoderReviewFail(' eregi($patter, $string)'); + $this->assertCoderReviewPass(' $test = re_eregi ($this'); + $this->assertCoderReviewPass(' $test = reeregi($this);'); + $this->assertCoderReviewPass(' when you use eregi() to do'); + $this->assertCoderReviewPass(' function eregi(string $pattern, string $text)'); + } + + function testPHP53EregiReplace() { + $this->assertCoderReviewFail(' $test = eregi_replace( $this, $that, $it);'); + $this->assertCoderReviewFail(' $test = eregi_replace(\'pattern\', $that, $this);'); + $this->assertCoderReviewFail(' eregi_replace($patter, $string, $that)'); + $this->assertCoderReviewPass(' $test = re_eregi_replace ($this'); + $this->assertCoderReviewPass(' $test = reeregi_replace($this);'); + $this->assertCoderReviewPass(' when you use eregi_replace() to do'); + $this->assertCoderReviewPass(' function eregi_replace(string $pattern, string $replacement, string $text)'); + } + + function testPHP53MagicQuotesRuntime() { + $this->assertCoderReviewFail(' $test = magic_quotes_runtime( 1 );'); + $this->assertCoderReviewFail(' $test = magic_quotes_runtime($this);'); + $this->assertCoderReviewFail(' magic_quotes_runtime(0)'); + $this->assertCoderReviewPass(' $test = re_magic_quotes_runtime ($this'); + $this->assertCoderReviewPass(' $test = remagic_quotes_runtime($this);'); + $this->assertCoderReviewPass(' when you use magic_quotes_runtime() to do'); + $this->assertCoderReviewPass(' function magic_quotes_runtime(bool $status)'); + + $this->assertCoderReviewFail(' $test = set_magic_quotes_runtime( 1 );'); + $this->assertCoderReviewFail(' $test = set_magic_quotes_runtime($this);'); + $this->assertCoderReviewFail(' set_magic_quotes_runtime(0)'); + $this->assertCoderReviewPass(' $test = re_set_magic_quotes_runtime ($this'); + $this->assertCoderReviewPass(' $test = reset_magic_quotes_runtime($this);'); + $this->assertCoderReviewPass(' when you use set_magic_quotes_runtime() to do'); + $this->assertCoderReviewPass(' function set_magic_quotes_runtime(bool $status)'); + } + + function testPHP53SessionReUnIsRegistered() { + $this->assertCoderReviewFail(' $test = session_register($this);'); + $this->assertCoderReviewFail(' $test = session_register(\'pattern\', $that, $this);'); + $this->assertCoderReviewFail(' session_register($patter, $string, $that)'); + $this->assertCoderReviewPass(' $test = customsession_register($this'); + $this->assertCoderReviewPass(' $test = custom_session_register($this);'); + $this->assertCoderReviewPass(' when you use session_register() to do'); + $this->assertCoderReviewPass(' function session_register(string $pattern, string $replacement, string $text)'); + + $this->assertCoderReviewFail(' $test = session_unregister($this);'); + $this->assertCoderReviewFail(' $test = session_unregister(\'pattern\', $that, $this);'); + $this->assertCoderReviewFail(' session_unregister($patter, $string, $that)'); + $this->assertCoderReviewPass(' $test = customsession_unregister($this'); + $this->assertCoderReviewPass(' $test = custom_session_unregister($this);'); + $this->assertCoderReviewPass(' when you use session_unregister() to do'); + $this->assertCoderReviewPass(' function session_unregister(string $pattern, string $replacement, string $text)'); + + $this->assertCoderReviewFail(' $test = session_is_registered($this);'); + $this->assertCoderReviewFail(' $test = session_is_registered(\'pattern\', $that, $this);'); + $this->assertCoderReviewFail(' session_is_registered($patter, $string, $that)'); + $this->assertCoderReviewPass(' $test = customsession_is_registered($this'); + $this->assertCoderReviewPass(' $test = custom_session_is_registered($this);'); + $this->assertCoderReviewPass(' when you use session_is_registered() to do'); + $this->assertCoderReviewPass(' function session_is_registered(string $pattern, string $replacement, string $text)'); + } + + function testPHP53SetSocketBlocking() { + $this->assertCoderReviewFail(' $test = set_socket_blocking( $this, $that);'); + $this->assertCoderReviewFail(' $test = set_socket_blocking($resource, 2);'); + $this->assertCoderReviewFail(' set_socket_blocking($this, $string)'); + $this->assertCoderReviewPass(' $test = my_set_socket_blocking ($this'); + $this->assertCoderReviewPass(' $test = customset_socket_blocking($this, $that);'); + $this->assertCoderReviewPass(' when you use set_socket_blocking() to do'); + $this->assertCoderReviewPass(' function set_socket_blocking(stream $stream, integer $what)'); + } + + function testPHP53Split() { + $this->assertCoderReviewFail(' $test = split( $this, $that);'); + $this->assertCoderReviewFail(' $test = split(\'pattern\', $that);'); + $this->assertCoderReviewFail(' split($patter, $string)'); + $this->assertCoderReviewPass(' $test = re_split ($this'); + $this->assertCoderReviewPass(' $test = resplit($this);'); + $this->assertCoderReviewPass(' when you use split() to do'); + $this->assertCoderReviewPass(' function split(string $pattern, string $text)'); + } + + function testPHP53Spliti() { + $this->assertCoderReviewFail(' $test = spliti( $this, $that);'); + $this->assertCoderReviewFail(' $test = spliti(\'pattern\', $that);'); + $this->assertCoderReviewFail(' spliti($patter, $string)'); + $this->assertCoderReviewPass(' $test = re_spliti ($this'); + $this->assertCoderReviewPass(' $test = respliti($this);'); + $this->assertCoderReviewPass(' when you use spliti() to do'); + $this->assertCoderReviewPass(' function spliti(string $pattern, string $text)'); + } + + function testPHP53SqlRegCase() { + $this->assertCoderReviewFail(' $test = sql_regcase( $string );'); + $this->assertCoderReviewFail(' $test = sql_regcase(\'string\');'); + $this->assertCoderReviewFail(' sql_regcase($pattern)'); + $this->assertCoderReviewPass(' $test = re_sql_regcase ($this'); + $this->assertCoderReviewPass(' $test = resql_regcase($this);'); + $this->assertCoderReviewPass(' when you use sql_regcase() to do'); + $this->assertCoderReviewPass(' function sql_regcase(string $pattern, string $text)'); + } + + function testPHP53MysqlDbQuery() { + $this->assertCoderReviewFail(' $test = mysql_db_query( $this, $that);'); + $this->assertCoderReviewFail(' $test = mysql_db_query(\'string\', $that);'); + $this->assertCoderReviewFail(' mysql_db_query($string, $string)'); + $this->assertCoderReviewPass(' $test = re_mysql_db_query ($this'); + $this->assertCoderReviewPass(' $test = remysql_db_query($this);'); + $this->assertCoderReviewPass(' when you use mysql_db_query() to do'); + $this->assertCoderReviewPass(' function mysql_db_query(string $pattern, string $text)'); + } + + function testPHP53MysqlEscapeString() { + $this->assertCoderReviewFail(' $test = mysql_escape_string( $this);'); + $this->assertCoderReviewFail(' $test = mysql_escape_string(\'string\');'); + $this->assertCoderReviewFail(' mysql_escape_string($string)'); + $this->assertCoderReviewPass(' $test = re_mysql_escape_string ($this'); + $this->assertCoderReviewPass(' $test = remysql_escape_string($this);'); + $this->assertCoderReviewPass(' when you use mysql_escape_string() to do'); + $this->assertCoderReviewPass(' function mysql_escape_string(string $string)'); + } + +}