From 40497ec824344116143bc30b84fe8eb1c1971ebf Mon Sep 17 00:00:00 2001 From: Marc Alexander Date: Tue, 21 Oct 2014 22:16:53 -0500 Subject: [ticket/13192] Add method for generating valid user page links PHPBB3-13192 --- phpBB/phpbb/path_helper.php | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) (limited to 'phpBB/phpbb/path_helper.php') diff --git a/phpBB/phpbb/path_helper.php b/phpBB/phpbb/path_helper.php index 936564d8b6..77f123bf2c 100644 --- a/phpBB/phpbb/path_helper.php +++ b/phpBB/phpbb/path_helper.php @@ -445,4 +445,35 @@ class path_helper return $url_parts['base'] . (($params) ? '?' . $this->glue_url_params($params) : ''); } + + /** + * Get a valid user page + * + * @param string $user_page The current user page + * @param bool $mod_rewrite Whether mod_rewrite is enabled, default: false + * + * @return string A valid user page based on user page and mod_rewrite + */ + public function get_valid_user_page($user_page, $mod_rewrite = false) + { + // We need to be cautious here. + // On some situations, the redirect path is an absolute URL, sometimes a relative path + // For a relative path, let's prefix it with $phpbb_root_path to point to the correct location, + // else we use the URL directly. + $url_parts = parse_url($user_page); + + // URL + if ($url_parts === false || empty($url_parts['scheme']) || empty($url_parts['host'])) + { + // Remove 'app.php/' from the page, when rewrite is enabled + if ($mod_rewrite && strpos($user_page, 'app.' . $this->php_ext . '/') === 0) + { + $user_page = substr($user_page, strlen('app.' . $this->php_ext . '/')); + } + + $user_page = $this->get_phpbb_root_path() . $user_page; + } + + return $user_page; + } } -- cgit v1.2.1 From a623868f20574e19d6840af11bce8836ad436e95 Mon Sep 17 00:00:00 2001 From: Marc Alexander Date: Tue, 21 Oct 2014 22:38:03 -0500 Subject: [ticket/13192] Pass correct parameters and rename method to get_valid_page PHPBB3-13192 --- phpBB/phpbb/path_helper.php | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) (limited to 'phpBB/phpbb/path_helper.php') diff --git a/phpBB/phpbb/path_helper.php b/phpBB/phpbb/path_helper.php index 77f123bf2c..0a41efc128 100644 --- a/phpBB/phpbb/path_helper.php +++ b/phpBB/phpbb/path_helper.php @@ -447,33 +447,33 @@ class path_helper } /** - * Get a valid user page + * Get a valid page * - * @param string $user_page The current user page + * @param string $page The page to verify * @param bool $mod_rewrite Whether mod_rewrite is enabled, default: false * - * @return string A valid user page based on user page and mod_rewrite + * @return string A valid page based on given page and mod_rewrite */ - public function get_valid_user_page($user_page, $mod_rewrite = false) + public function get_valid_page($page, $mod_rewrite = false) { // We need to be cautious here. // On some situations, the redirect path is an absolute URL, sometimes a relative path // For a relative path, let's prefix it with $phpbb_root_path to point to the correct location, // else we use the URL directly. - $url_parts = parse_url($user_page); + $url_parts = parse_url($page); // URL if ($url_parts === false || empty($url_parts['scheme']) || empty($url_parts['host'])) { // Remove 'app.php/' from the page, when rewrite is enabled - if ($mod_rewrite && strpos($user_page, 'app.' . $this->php_ext . '/') === 0) + if ($mod_rewrite && strpos($page, 'app.' . $this->php_ext . '/') === 0) { - $user_page = substr($user_page, strlen('app.' . $this->php_ext . '/')); + $page = substr($page, strlen('app.' . $this->php_ext . '/')); } - $user_page = $this->get_phpbb_root_path() . $user_page; + $page = $this->get_phpbb_root_path() . $page; } - return $user_page; + return $page; } } -- cgit v1.2.1 From 281cc5353208258e7f4a9032f720c5f1ae0fb8dc Mon Sep 17 00:00:00 2001 From: Marc Alexander Date: Sun, 2 Nov 2014 12:01:42 +0100 Subject: [ticket/13192] Remove app.php on mod rewrite even if app.php is outside root PHPBB3-13192 --- phpBB/phpbb/path_helper.php | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) (limited to 'phpBB/phpbb/path_helper.php') diff --git a/phpBB/phpbb/path_helper.php b/phpBB/phpbb/path_helper.php index 0a41efc128..b2ec9d98e0 100644 --- a/phpBB/phpbb/path_helper.php +++ b/phpBB/phpbb/path_helper.php @@ -465,13 +465,16 @@ class path_helper // URL if ($url_parts === false || empty($url_parts['scheme']) || empty($url_parts['host'])) { - // Remove 'app.php/' from the page, when rewrite is enabled - if ($mod_rewrite && strpos($page, 'app.' . $this->php_ext . '/') === 0) + // Remove 'app.php/' from the page, when rewrite is enabled. + // Treat app.php as a reserved file name and remove on mod rewrite + // even if it might not be in the phpBB root. + if ($mod_rewrite && ($app_position = strpos($page, 'app.' . $this->php_ext . '/')) !== false) { - $page = substr($page, strlen('app.' . $this->php_ext . '/')); + $page = substr($page, 0, $app_position) . substr($page, $app_position + strlen('app.' . $this->php_ext . '/')); } - $page = $this->get_phpbb_root_path() . $page; + // Remove preceding slashes from page name and prepend root path + $page = $this->get_phpbb_root_path() . preg_replace('@^(?:([\\/\\\])?)@', '', $page); } return $page; -- cgit v1.2.1 From e6509aaf606264414f30248afd1081ff05207328 Mon Sep 17 00:00:00 2001 From: Marc Alexander Date: Sat, 10 Jan 2015 12:46:40 +0100 Subject: [ticket/13192] Use ltrim() instead of preg_replace() PHPBB3-13192 --- phpBB/phpbb/path_helper.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'phpBB/phpbb/path_helper.php') diff --git a/phpBB/phpbb/path_helper.php b/phpBB/phpbb/path_helper.php index b2ec9d98e0..6feb64b07e 100644 --- a/phpBB/phpbb/path_helper.php +++ b/phpBB/phpbb/path_helper.php @@ -474,7 +474,7 @@ class path_helper } // Remove preceding slashes from page name and prepend root path - $page = $this->get_phpbb_root_path() . preg_replace('@^(?:([\\/\\\])?)@', '', $page); + $page = $this->get_phpbb_root_path() . ltrim($page, '/\\'); } return $page; -- cgit v1.2.1