Пример #1
0
 /**
  * Load a function, or array of functions
  *
  * @param   string|array    $function   The function or functions to load
  * @return  bool|array      TRUE if loaded, FALSE if not
  */
 function loadFunction($function)
 {
     // Multiple
     if (is_array($function)) {
         $res = array();
         foreach ($function as $singlefunc) {
             $res[$singlefunc] = PHP_Compat::loadFunction($singlefunc);
         }
         return $res;
     }
     // Check for packages which can modify the function table at runtime
     $symbolfuncs = array('rename_function', 'runkit_rename_function');
     foreach ($symbolfuncs as $symbolfunc) {
         $renamedfunction = 'php_compat_renamed' . $function;
         if (function_exists($symbolfunc) && function_exists($function) && !function_exists($renamedfunction)) {
             // Rename the core function
             rename_function($function, $renamedfunction);
             break;
         }
     }
     // Single
     if (!function_exists($function)) {
         $file = sprintf('PHP/Compat/Function/%s.php', $function);
         if (@(include_once $file) !== false) {
             return true;
         }
     }
     return false;
 }
Пример #2
0
 /**
  * Restore an overriden function to its builtin state
  *
  * @param string $sFunction    required=true
  */
 public static function restore($sFunction)
 {
     $sRenamedFunction = self::getRenamedFunction($sFunction);
     if (function_exists($sRenamedFunction)) {
         rename_function($sFunction, uniqid($sFunction));
         rename_function($sRenamedFunction, $sFunction);
     }
     unset(self::$aOverrides[$sFunction]);
 }
 public function __destruct()
 {
     // rename_function may causes CLI error report in Windows XP, but nothing more happen
     if ($this->apdExt && $GLOBALS['test_header']) {
         $GLOBALS['test_header'] = 0;
         rename_function('header', 'header' . str_replace(array('.', ' '), array('', ''), microtime()));
         rename_function('headers_sent', 'headers_sent' . str_replace(array('.', ' '), array('', ''), microtime()));
         rename_function('test_header', 'header');
         rename_function('test_headers_sent', 'headers_sent');
     }
 }
Пример #4
0
 /**
  * 禁止系统调用的函数
  */
 private static function _init_funtions()
 {
     if (!function_exists('rename_function')) {
         return;
     }
     $funcs = array_merge(App_Info::config('FORBIDDEN_FUNCTIONS'), Core_Utils::$forbidden_funcs);
     foreach ($funcs as $func) {
         if (function_exists($func)) {
             $funcx = Core_Utils::random_name($func);
             rename_function($func, $funcx);
         }
     }
 }
Пример #5
0
function _dbslayer_map()
{
    $substs = array('is_resource' => 'cherokee_is_resource($link)', 'mysql_affected_rows' => 'cherokee_mysql_affected_rows($link)', 'mysql_client_encoding' => 'cherokee_mysql_client_encoding ($link)', 'mysql_close' => 'cherokee_mysql_close($link)', 'mysql_connect' => 'cherokee_mysql_connect($host, $user, $pass, $new_link, $client_flags)', 'mysql_create_db' => 'cherokee_mysql_create_db($database_name, $link)', 'mysql_data_seek' => 'cherokee_mysql_data_seek($result, $row_number)', 'mysql_db_name' => 'cherokee_mysql_db_name($result, $row, $field)', 'mysql_db_query' => 'cherokee_mysql_db_query($database, $query, $link)', 'mysql_drop_db' => 'cherokee_mysql_drop_db($database_name, $link)', 'mysql_errno' => 'cherokee_mysql_errno($link)', 'mysql_error' => 'cherokee_mysql_error($link)', 'mysql_escape_string' => 'cherokee_mysql_escape_string($unescaped_string)', 'mysql_fetch_array' => 'cherokee_mysql_fetch_array($result, $result_type)', 'mysql_fetch_assoc' => 'cherokee_mysql_fetch_assoc($result)', 'mysql_fetch_field' => 'cherokee_mysql_fetch_field($result, $field_offset)', 'mysql_fetch_lengths' => 'cherokee_mysql_fetch_lengths($result)', 'mysql_fetch_num' => 'cherokee_mysql_fetch_num($result)', 'mysql_fetch_object' => 'cherokee_mysql_fetch_object (&$result, $class_name, $params)', 'mysql_field_flags' => 'cherokee_mysql_field_flags ($result, $field_offset)', 'mysql_field_name' => 'cherokee_mysql_field_name ($result, $field_offset)', 'mysql_field_seek' => 'cherokee_mysql_field_seek (&$result, $field_offset)', 'mysql_field_type' => 'cherokee_mysql_field_type ($result, $field_offset)', 'mysql_free_result' => 'cherokee_mysql_free_result($result)', 'mysql_get_client_info' => 'cherokee_mysql_get_client_info()', 'mysql_get_host_info' => 'cherokee_mysql_get_host_info ($link)', 'mysql_get_proto_info' => 'cherokee_mysql_get_proto_info ($link)', 'mysql_get_server_info' => 'cherokee_mysql_get_server_info($link)', 'mysql_info' => 'cherokee_mysql_info ($link)', 'mysql_insert_id' => 'cherokee_mysql_insert_id($link)', 'mysql_list_dbs' => 'cherokee_mysql_list_dbs($link)', 'mysql_list_fields' => 'cherokee_mysql_list_fields ($database, $table_name, $link)', 'mysql_list_processes' => 'cherokee_mysql_list_processes ($link)', 'mysql_list_tables' => 'cherokee_mysql_list_tables  ($database, $link)', 'mysql_num_fields' => 'cherokee_mysql_num_fields ($result)', 'mysql_num_rows' => 'cherokee_mysql_num_rows($result)', 'mysql_pconnect' => 'cherokee_mysql_pconnect($host, $user, $pass, $client_flags)', 'mysql_ping' => 'cherokee_mysql_ping ($link)', 'mysql_query' => 'cherokee_mysql_query($query, $link)', 'mysql_real_escape_string' => 'cherokee_mysql_real_escape_string($unescaped_string, $link)', 'mysql_result' => 'cherokee_mysql_result($result, $row, $field)', 'mysql_select_db' => 'cherokee_mysql_select_db($database_name, &$link)', 'mysql_set_charset' => 'cherokee_mysql_set_charset($charset, $link)', 'mysql_stat' => 'cherokee_mysql_stat($link)', 'mysql_tablename' => 'cherokee_mysql_tablename($result, $i)', 'mysql_thread_id' => 'cherokee_mysql_thread_id ($link)', 'mysql_unbuffered_query' => 'cherokee_mysql_unbuffered_query($query, $link)');
    $args = array('is_resource' => '$link', 'mysql_affected_rows' => '$link = NULL', 'mysql_client_encoding' => '$link = NULL', 'mysql_close' => '$link = NULL', 'mysql_connect' => '$host = NULL, $user = NULL, $pass = NULL, $new_link = false, $client_flags = 0', 'mysql_create_db' => '$database_name, $link = NULL', 'mysql_data_seek' => '&$result, $row_number', 'mysql_db_name' => '$result, $row, $field = NULL', 'mysql_db_query' => '$database, $query, $link = NULL', 'mysql_drop_db' => '$database_name, $link = NULL', 'mysql_errno' => '$link = NULL', 'mysql_error' => '$link = NULL', 'mysql_escape_string' => '$unescaped_string', 'mysql_fetch_array' => '&$result, $result_type = MYSQL_BOTH', 'mysql_fetch_assoc' => '&$result', 'mysql_fetch_field' => '&$result, $field_offset = -1', 'mysql_fetch_lengths' => '$result', 'mysql_fetch_num' => '&$result', 'mysql_fetch_object' => '&$result, $class_name = "stdClass", $params = NULL', 'mysql_field_flags' => '$result, $field_offset', 'mysql_field_name' => '$result, $field_offset', 'mysql_field_seek' => '&$result, $field_offset', 'mysql_field_type' => '$result, $field_offset', 'mysql_free_result' => '&$result', 'mysql_get_client_info' => '', 'mysql_get_host_info' => '$link = NULL', 'mysql_get_proto_info' => '$link = NULL', 'mysql_get_server_info' => '$link = NULL', 'mysql_info' => '$link = NULL', 'mysql_insert_id' => '$link = NULL', 'mysql_list_dbs' => '$link = NULL', 'mysql_list_fields' => '$database, $table_name, $link = NULL', 'mysql_list_processes' => '$link = NULL', 'mysql_list_tables' => '$database, $link = NULL', 'mysql_num_fields' => '$result', 'mysql_num_rows' => '$result', 'mysql_pconnect' => '$host = NULL, $user = NULL, $pass = NULL, $client_flags = 0', 'mysql_ping' => '$link = NULL', 'mysql_query' => '$query, $link = NULL', 'mysql_real_escape_string' => '$unescaped_string, $link = NULL', 'mysql_result' => '&$result, $row, $field = 0', 'mysql_select_db' => '$database_name, $link = NULL', 'mysql_set_charset' => '$charset , $link = NULL', 'mysql_stat' => '$link = NULL', 'mysql_tablename' => '$result, $i', 'mysql_thread_id' => '$link = NULL', 'mysql_unbuffered_query' => '$query, $link = NULL');
    foreach ($substs as $func => $ren_func) {
        $ret = override_function($func, $args[$func], "return {$substs[$func]};");
        $ret &= rename_function("__overridden__", "_{$ren_func}");
        if ($ret == FALSE) {
            return FALSE;
        }
    }
    return TRUE;
}
Пример #6
0
}
function wfMsgRealStub()
{
    return '';
}
function wfGetDBStub()
{
    throw new WikiaException('No DB in unit tests');
}
function sno_callback($className)
{
    if ($className == 'Message') {
        $className = 'MessageStub';
    }
    return $className;
}
if ($wgRunningUnitTests && $wgNoDBUnits) {
    rename_function('wfMsgExt', 'wfMsgExt_orig');
    rename_function('wfMsgReal', 'wfMsgReal_orig');
    rename_function('wfGetDB', 'wfGetDB_orig');
    rename_function('wfMsgExtStub', 'wfMsgExt');
    rename_function('wfMsgRealStub', 'wfMsgReal');
    rename_function('wfGetDBStub', 'wfGetDB');
    $wgMemc = new FakeCache();
    $messageMemc = null;
    $parserMemc = null;
    set_new_overload('sno_callback');
}
require_once 'Zend/Exception.php';
require_once 'Zend/Config.php';
require_once 'Zend/Config/Exception.php';
Пример #7
0
 /**
  * Perform actual function renaming.
  *
  * It actually swaps the two functions with each other, which is why
  * there are three calls to rename the function.
  *
  * @param string $originalName
  * @param string $replacement
  */
 protected function doFunctionRename($originalName, $replacement)
 {
     if (!extension_loaded('test_helpers') && !extension_loaded('runkit')) {
         die('test_helpers extension and runkit extensions are not found - you need one of them');
     }
     $this->confirmFunction($originalName);
     $this->confirmFunction($replacement);
     $tempName = $originalName . '_TEMP';
     while (function_exists($tempName)) {
         $tempName .= substr(uniqid(), -4);
     }
     // Runkit's function renaming works better in PHP 5.4
     if (function_exists('runkit_function_rename')) {
         runkit_function_rename($originalName, $tempName);
         runkit_function_rename($replacement, $originalName);
         runkit_function_rename($tempName, $replacement);
     } else {
         rename_function($originalName, $tempName);
         rename_function($replacement, $originalName);
         rename_function($tempName, $replacement);
     }
 }