aboutsummaryrefslogtreecommitdiffstats
path: root/phpBB/phpbb/extension/metadata_manager.php
diff options
context:
space:
mode:
authorJoas Schilling <nickvergessen@gmx.de>2013-12-16 10:18:56 +0100
committerJoas Schilling <nickvergessen@gmx.de>2013-12-16 10:18:56 +0100
commit4a73ce0933c8bfecf37cf760d3fd96bb7a7f48ca (patch)
tree9ff4a74a99cab79322a2fe8cc728f0dc283d77df /phpBB/phpbb/extension/metadata_manager.php
parent8da2f349fe39a46fcd70e59ff087071927edbc34 (diff)
parentc42bd28d172a9ae7439cc3868ebfda87e93f3490 (diff)
downloadforums-4a73ce0933c8bfecf37cf760d3fd96bb7a7f48ca.tar
forums-4a73ce0933c8bfecf37cf760d3fd96bb7a7f48ca.tar.gz
forums-4a73ce0933c8bfecf37cf760d3fd96bb7a7f48ca.tar.bz2
forums-4a73ce0933c8bfecf37cf760d3fd96bb7a7f48ca.tar.xz
forums-4a73ce0933c8bfecf37cf760d3fd96bb7a7f48ca.zip
Merge remote-tracking branch 'prototech/ticket/12009' into develop
* prototech/ticket/12009: [ticket/12009] Prevent user from enabling invalid extension through direct URL [ticket/12009] Update functional test to check for invalid extensions. [ticket/12009] Fix functional tests. [ticket/12009] Move valid extensions in tests to correct dir structure. [ticket/12009] Do not allow incorrectly structured extensions to be installed.
Diffstat (limited to 'phpBB/phpbb/extension/metadata_manager.php')
-rw-r--r--phpBB/phpbb/extension/metadata_manager.php14
1 files changed, 12 insertions, 2 deletions
diff --git a/phpBB/phpbb/extension/metadata_manager.php b/phpBB/phpbb/extension/metadata_manager.php
index d0323120d8..66cdb86513 100644
--- a/phpBB/phpbb/extension/metadata_manager.php
+++ b/phpBB/phpbb/extension/metadata_manager.php
@@ -266,8 +266,8 @@ class metadata_manager
*/
public function validate_enable()
{
- // Check for phpBB, PHP versions
- if (!$this->validate_require_phpbb() || !$this->validate_require_php())
+ // Check for valid directory & phpBB, PHP versions
+ if (!$this->validate_dir() || !$this->validate_require_phpbb() || !$this->validate_require_php())
{
return false;
}
@@ -275,6 +275,16 @@ class metadata_manager
return true;
}
+ /**
+ * Validates the most basic directory structure to ensure it follows <vendor>/<ext> convention.
+ *
+ * @return boolean True when passes validation
+ */
+ public function validate_dir()
+ {
+ return (substr_count($this->ext_name, '/') === 1 && $this->ext_name == $this->get_metadata('name'));
+ }
+
/**
* Validates the contents of the phpbb requirement field