diff options
author | Andreas Fischer <bantu@phpbb.com> | 2012-10-18 16:26:54 +0200 |
---|---|---|
committer | Andreas Fischer <bantu@phpbb.com> | 2012-10-18 16:26:54 +0200 |
commit | c84268d2f9a758a3bcc570acc60c01e1185eeb14 (patch) | |
tree | 8bc8cf71e885194bcaccc766bf699f120c0e0d73 /phpBB | |
parent | bd4408875784294987c806bf123a121a84ab8363 (diff) | |
parent | b283df8241c3d8fc5f2684e37d8a0f237df39c4f (diff) | |
download | forums-c84268d2f9a758a3bcc570acc60c01e1185eeb14.tar forums-c84268d2f9a758a3bcc570acc60c01e1185eeb14.tar.gz forums-c84268d2f9a758a3bcc570acc60c01e1185eeb14.tar.bz2 forums-c84268d2f9a758a3bcc570acc60c01e1185eeb14.tar.xz forums-c84268d2f9a758a3bcc570acc60c01e1185eeb14.zip |
Merge remote-tracking branch 'p/ticket/10848' into develop-olympus
* p/ticket/10848:
[ticket/10848] Move include up.
[ticket/10848] Add phpbb_ prefix.
[ticket/10848] Redirect from adm to installer correctly.
Diffstat (limited to 'phpBB')
-rw-r--r-- | phpBB/common.php | 7 | ||||
-rw-r--r-- | phpBB/includes/functions.php | 30 |
2 files changed, 36 insertions, 1 deletions
diff --git a/phpBB/common.php b/phpBB/common.php index 491addc5e0..31ca746924 100644 --- a/phpBB/common.php +++ b/phpBB/common.php @@ -26,6 +26,8 @@ if (file_exists($phpbb_root_path . 'config.' . $phpEx)) if (!defined('PHPBB_INSTALLED')) { // Redirect the user to the installer + require($phpbb_root_path . 'includes/functions.' . $phpEx); + // We have to generate a full HTTP/1.1 header here since we can't guarantee to have any of the information // available as used by the redirect function $server_name = (!empty($_SERVER['HTTP_HOST'])) ? strtolower($_SERVER['HTTP_HOST']) : ((!empty($_SERVER['SERVER_NAME'])) ? $_SERVER['SERVER_NAME'] : getenv('SERVER_NAME')); @@ -38,10 +40,13 @@ if (!defined('PHPBB_INSTALLED')) $script_name = (!empty($_SERVER['REQUEST_URI'])) ? $_SERVER['REQUEST_URI'] : getenv('REQUEST_URI'); } + // $phpbb_root_path accounts for redirects from e.g. /adm + $script_path = trim(dirname($script_name)) . '/' . $phpbb_root_path . 'install/index.' . $phpEx; // Replace any number of consecutive backslashes and/or slashes with a single slash // (could happen on some proxy setups and/or Windows servers) - $script_path = trim(dirname($script_name)) . '/install/index.' . $phpEx; $script_path = preg_replace('#[\\\\/]{2,}#', '/', $script_path); + // Eliminate . and .. from the path + $script_path = phpbb_clean_path($script_path); $url = (($secure) ? 'https://' : 'http://') . $server_name; diff --git a/phpBB/includes/functions.php b/phpBB/includes/functions.php index ca58220619..65d8be32ad 100644 --- a/phpBB/includes/functions.php +++ b/phpBB/includes/functions.php @@ -1176,6 +1176,36 @@ else } } +/** +* Eliminates useless . and .. components from specified path. +* +* @param string $path Path to clean +* @return string Cleaned path +*/ +function phpbb_clean_path($path) +{ + $exploded = explode('/', $path); + $filtered = array(); + foreach ($exploded as $part) + { + if ($part === '.' && !empty($filtered)) + { + continue; + } + + if ($part === '..' && !empty($filtered) && $filtered[sizeof($filtered) - 1] !== '..') + { + array_pop($filtered); + } + else + { + $filtered[] = $part; + } + } + $path = implode('/', $filtered); + return $path; +} + if (!function_exists('htmlspecialchars_decode')) { /** |