diff options
Diffstat (limited to 'phpBB/phpbb')
| -rw-r--r-- | phpBB/phpbb/di/container_builder.php | 2 | ||||
| -rw-r--r-- | phpBB/phpbb/di/proxy_instantiator.php | 74 | 
2 files changed, 75 insertions, 1 deletions
diff --git a/phpBB/phpbb/di/container_builder.php b/phpBB/phpbb/di/container_builder.php index b6854673c2..6412ccea46 100644 --- a/phpBB/phpbb/di/container_builder.php +++ b/phpBB/phpbb/di/container_builder.php @@ -488,7 +488,7 @@ class container_builder  	protected function create_container(array $extensions)  	{  		$container = new ContainerBuilder(new ParameterBag($this->get_core_parameters())); -		$container->setProxyInstantiator(new RuntimeInstantiator()); +		$container->setProxyInstantiator(new proxy_instantiator($this->get_cache_dir()));  		$extensions_alias = array(); diff --git a/phpBB/phpbb/di/proxy_instantiator.php b/phpBB/phpbb/di/proxy_instantiator.php new file mode 100644 index 0000000000..28d9972cd7 --- /dev/null +++ b/phpBB/phpbb/di/proxy_instantiator.php @@ -0,0 +1,74 @@ +<?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. + * + */ + +namespace phpbb\di; + +use \bantu\IniGetWrapper\IniGetWrapper; +use ProxyManager\Configuration; +use ProxyManager\Factory\LazyLoadingValueHolderFactory; +use ProxyManager\GeneratorStrategy\EvaluatingGeneratorStrategy; +use ProxyManager\Proxy\LazyLoadingInterface; +use Symfony\Component\DependencyInjection\ContainerInterface; +use Symfony\Component\DependencyInjection\Definition; +use Symfony\Component\DependencyInjection\LazyProxy\Instantiator\InstantiatorInterface; + +/** + * Runtime lazy loading proxy generator extended for allowing use while using + * open_basedir restrictions + * + * Original author: Marco Pivetta <ocramius@gmail.com> + */ +class proxy_instantiator implements InstantiatorInterface +{ +	/** +	 * @var LazyLoadingValueHolderFactory +	 */ +	private $factory; + +	/** +	 * proxy_instantiator constructor +	 * @param string $cache_dir Cache dir for fall back when using open_basedir +	 */ +	public function __construct($cache_dir) +	{ +		$config = new Configuration(); + +		// Prevent trying to write to system temp dir in case of open_basedir +		// restrictions being in effect +		$ini_wrapper = new IniGetWrapper(); +		if ($ini_wrapper->getString('open_basedir') || !file_exists(sys_get_temp_dir())) +		{ +			$config->setProxiesTargetDir($cache_dir); +		} +		$config->setGeneratorStrategy(new EvaluatingGeneratorStrategy()); + +		$this->factory = new LazyLoadingValueHolderFactory($config); +	} + +	/** +	 * {@inheritdoc} +	 */ +	public function instantiateProxy(ContainerInterface $container, Definition $definition, $id, $realInstantiator) +	{ +		return $this->factory->createProxy( +			$definition->getClass(), +			function (&$wrappedInstance, LazyLoadingInterface $proxy) use ($realInstantiator) { +				$wrappedInstance = call_user_func($realInstantiator); + +				$proxy->setProxyInitializer(null); + +				return true; +			} +		); +	} +}  | 
