aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMarc Alexander <admin@m-a-styles.de>2014-09-19 13:50:56 +0200
committerMarc Alexander <admin@m-a-styles.de>2014-09-19 13:54:15 +0200
commit6fd54436ee4568cd2e70d08063a816e3ce1ff4bc (patch)
treebd84f2e4e444ab0e2e2e7957a9c7a2cfb3d5625a
parent4186ced4791cd8ea6c105d462f361be15eaff218 (diff)
downloadforums-6fd54436ee4568cd2e70d08063a816e3ce1ff4bc.tar
forums-6fd54436ee4568cd2e70d08063a816e3ce1ff4bc.tar.gz
forums-6fd54436ee4568cd2e70d08063a816e3ce1ff4bc.tar.bz2
forums-6fd54436ee4568cd2e70d08063a816e3ce1ff4bc.tar.xz
forums-6fd54436ee4568cd2e70d08063a816e3ce1ff4bc.zip
[ticket/13073] Add path regex to get_preg_expression() and add unit tests
We're now calling get_preg_expression() instead of hardcoding the regex into the helper route method. PHPBB3-13073
-rw-r--r--phpBB/includes/functions.php5
-rw-r--r--phpBB/phpbb/controller/helper.php2
-rw-r--r--tests/functions/get_preg_expression_test.php38
3 files changed, 44 insertions, 1 deletions
diff --git a/phpBB/includes/functions.php b/phpBB/includes/functions.php
index a61518401c..9e1e1cae0e 100644
--- a/phpBB/includes/functions.php
+++ b/phpBB/includes/functions.php
@@ -3317,6 +3317,11 @@ function get_preg_expression($mode)
case 'table_prefix':
return '#^[a-zA-Z][a-zA-Z0-9_]*$#';
break;
+
+ // Matches the predecing dot
+ case 'path_remove_dot_trailing_slash':
+ return '#^(?:(\.)?)+(?:(.+)?)+(?:([\\/\\\])$)#';
+ break;
}
return '';
diff --git a/phpBB/phpbb/controller/helper.php b/phpBB/phpbb/controller/helper.php
index 6c78868dbb..fc19b855c0 100644
--- a/phpBB/phpbb/controller/helper.php
+++ b/phpBB/phpbb/controller/helper.php
@@ -147,7 +147,7 @@ class helper
}
else
{
- $base_url .= preg_replace('#^(?:(\.))+(?:(.+)?)+(?:([\\/\\\])$)#', '$2', $this->phpbb_root_path);
+ $base_url .= preg_replace(get_preg_expression('path_remove_dot_trailing_slash'), '$2', $this->phpbb_root_path);
}
$base_url = $this->filesystem->clean_path($base_url);
diff --git a/tests/functions/get_preg_expression_test.php b/tests/functions/get_preg_expression_test.php
new file mode 100644
index 0000000000..ed0f2b5685
--- /dev/null
+++ b/tests/functions/get_preg_expression_test.php
@@ -0,0 +1,38 @@
+<?php
+/**
+*
+* This file is part of the phpBB Forum Software package.
+*
+* @copyright (c) phpBB Limited <https://www.phpbb.com>
+* @license GNU General Public License, version 2 (GPL-2.0)
+*
+* For full copyright and license information, please see
+* the docs/CREDITS.txt file.
+*
+*/
+
+require_once dirname(__FILE__) . '/../../phpBB/includes/functions.php';
+
+class phpbb_functions_get_preg_expression_test extends phpbb_test_case
+{
+ public function data_path_remove_dot_trailing_slash()
+ {
+ return array(
+ array('/..', '$2', './../'),
+ array('/..', '$2', '/../'),
+ array('', '$2', ''),
+ array('', '$2', './'),
+ array('', '$2', '/'),
+ array('/../..', '$2', './../../'),
+ array('/../..', '$2', '/../../'),
+ );
+ }
+
+ /**
+ * @dataProvider data_path_remove_dot_trailing_slash
+ */
+ public function test_path_remove_dot_trailing_slash($expected, $replace, $input)
+ {
+ $this->assertSame($expected, preg_replace(get_preg_expression('path_remove_dot_trailing_slash'), $replace, $input));
+ }
+}