diff options
Diffstat (limited to 'phpBB/phpbb')
| -rw-r--r-- | phpBB/phpbb/extension/manager.php | 24 | 
1 files changed, 23 insertions, 1 deletions
| diff --git a/phpBB/phpbb/extension/manager.php b/phpBB/phpbb/extension/manager.php index 76f0e3558e..770c574dd5 100644 --- a/phpBB/phpbb/extension/manager.php +++ b/phpBB/phpbb/extension/manager.php @@ -524,7 +524,29 @@ class manager  	*/  	public function is_available($name)  	{ -		return file_exists($this->get_extension_path($name, true)); +		// Not available if the folder does not exist +		if (!file_exists($this->get_extension_path($name, true))) +		{ +			return false; +		} + +		$composer_file = $this->get_extension_path($name, true) . '/composer.json'; + +		// Not available if there is no composer.json. +		if (!is_readable($composer_file) || !($ext_info = file_get_contents($composer_file))) +		{ +			return false; +		} +		$ext_info = json_decode($ext_info, true); + +		// Not available if malformed name or if the directory structure +		// does not match the name value specified in composer.json. +		if (substr_count($name, '/') !== 1 || !isset($ext_info['name']) || $name != $ext_info['name']) +		{ +			return false; +		} + +		return true;  	}  	/** | 
