From f6e177a89832ba36409ac845eb72522e051bb0f3 Mon Sep 17 00:00:00 2001 From: Christian Weiske Date: Fri, 4 Jul 2014 18:25:01 +0200 Subject: [PATCH] config file setup instructions --- src/phorkie/SetupCheck.php | 7 +++++-- src/phorkie/Tools.php | 12 ++++++++++++ tests/phorkie/ToolsTest.php | 32 ++++++++++++++++++++++++++++++++ www/setup.php | 31 +++++++++++++++++++++++++++++++ 4 files changed, 80 insertions(+), 2 deletions(-) diff --git a/src/phorkie/SetupCheck.php b/src/phorkie/SetupCheck.php index 69cffd8..f8edd86 100644 --- a/src/phorkie/SetupCheck.php +++ b/src/phorkie/SetupCheck.php @@ -48,9 +48,12 @@ class SetupCheck { foreach ($GLOBALS['phorkie']['cfgfiles'] as $file => $loaded) { if ($loaded) { - $this->ok('Loaded config file: ' . $file); + $this->ok('Loaded config file: ' . Tools::foldPath($file)); } else { - $this->info('Possible config file: ' . $file . ' (not loaded)'); + $this->info( + 'Possible config file: ' . Tools::foldPath($file) + . ' (not loaded)' + ); } } } diff --git a/src/phorkie/Tools.php b/src/phorkie/Tools.php index 7c9c46e..7819cda 100644 --- a/src/phorkie/Tools.php +++ b/src/phorkie/Tools.php @@ -96,5 +96,17 @@ class Tools return '/'; } + + /** + * Resolves "/../" and "/./" in file paths without validating them. + */ + public static function foldPath($path) + { + $path = str_replace('/./', '/', $path); + $path = str_replace('/./', '/', $path); + $path = preg_replace('#/[^/]+/\.\./#', '/', $path); + $path = preg_replace('#/[^/]+/\.\./#', '/', $path); + return $path; + } } ?> diff --git a/tests/phorkie/ToolsTest.php b/tests/phorkie/ToolsTest.php index 7a5be16..021797d 100644 --- a/tests/phorkie/ToolsTest.php +++ b/tests/phorkie/ToolsTest.php @@ -33,5 +33,37 @@ class ToolsTest extends \PHPUnit_Framework_TestCase $_SERVER['SCRIPT_NAME'] = '/new.php'; $this->assertEquals('/foo/', Tools::detectBaseUrl()); } + + public function testFoldPathParentSingle() + { + $this->assertEquals( + '/path/to/foo', + Tools::foldPath('/path/to/bar/../foo') + ); + } + + public function testFoldPathParentDouble() + { + $this->assertEquals( + '/path/to/foo', + Tools::foldPath('/path/to/foo/bar/../../foo') + ); + } + + public function testFoldPathCurrentSingle() + { + $this->assertEquals( + '/path/to/foo/', + Tools::foldPath('/path/to/foo/./') + ); + } + + public function testFoldPathCurrentThrice() + { + $this->assertEquals( + '/path/to/foo/', + Tools::foldPath('/path/././to/foo/./') + ); + } } ?> diff --git a/www/setup.php b/www/setup.php index cd0deaa..f0be905 100644 --- a/www/setup.php +++ b/www/setup.php @@ -74,6 +74,7 @@ $out = <<

phorkie setup check

+

Check results