aboutsummaryrefslogtreecommitdiffstats
path: root/phpBB
diff options
context:
space:
mode:
authorAndreas Fischer <bantu@phpbb.com>2012-10-18 16:26:54 +0200
committerAndreas Fischer <bantu@phpbb.com>2012-10-18 16:26:54 +0200
commitc84268d2f9a758a3bcc570acc60c01e1185eeb14 (patch)
tree8bc8cf71e885194bcaccc766bf699f120c0e0d73 /phpBB
parentbd4408875784294987c806bf123a121a84ab8363 (diff)
parentb283df8241c3d8fc5f2684e37d8a0f237df39c4f (diff)
downloadforums-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.php7
-rw-r--r--phpBB/includes/functions.php30
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'))
{
/**