diff options
author | Roeland Jago Douma <rullzer@users.noreply.github.com> | 2019-06-05 09:01:59 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-06-05 09:01:59 +0200 |
commit | bc43718f22192016a608098350585d4c0d3cf0d2 (patch) | |
tree | 5ddc4eeadee79baa3118307a65f6112a88adc281 | |
parent | 05058b0135813c4bfc355486e04e2324e2244078 (diff) | |
parent | 49361c40e26d0235572c83f98f48f876027ae835 (diff) | |
download | nextcloud-server-bc43718f22192016a608098350585d4c0d3cf0d2.tar.gz nextcloud-server-bc43718f22192016a608098350585d4c0d3cf0d2.zip |
Merge pull request #15816 from nextcloud/enh/do_not_try_to_instantiate_builtintypes
Do not autoload built in types
-rw-r--r-- | apps/dav/lib/CalDAV/CalDavBackend.php | 2 | ||||
-rw-r--r-- | apps/dav/lib/Connector/Sabre/Principal.php | 2 | ||||
-rw-r--r-- | apps/dav/tests/unit/AppInfo/PluginManagerTest.php | 12 | ||||
-rw-r--r-- | lib/private/AppFramework/DependencyInjection/DIContainer.php | 9 | ||||
-rw-r--r-- | lib/private/AppFramework/Utility/SimpleContainer.php | 14 | ||||
-rw-r--r-- | lib/private/ServerContainer.php | 9 | ||||
-rw-r--r-- | lib/public/IContainer.php | 3 | ||||
-rw-r--r-- | tests/lib/Contacts/ContactsMenu/ActionProviderStoreTest.php | 6 |
8 files changed, 22 insertions, 35 deletions
diff --git a/apps/dav/lib/CalDAV/CalDavBackend.php b/apps/dav/lib/CalDAV/CalDavBackend.php index 14de848013f..2d3dbd8dd12 100644 --- a/apps/dav/lib/CalDAV/CalDavBackend.php +++ b/apps/dav/lib/CalDAV/CalDavBackend.php @@ -192,7 +192,7 @@ class CalDavBackend extends AbstractBackend implements SyncSupport, Subscription ISecureRandom $random, ILogger $logger, EventDispatcherInterface $dispatcher, - $legacyEndpoint = false) { + bool $legacyEndpoint = false) { $this->db = $db; $this->principalBackend = $principalBackend; $this->userManager = $userManager; diff --git a/apps/dav/lib/Connector/Sabre/Principal.php b/apps/dav/lib/Connector/Sabre/Principal.php index 812f9d54162..902c70bdaff 100644 --- a/apps/dav/lib/Connector/Sabre/Principal.php +++ b/apps/dav/lib/Connector/Sabre/Principal.php @@ -91,7 +91,7 @@ class Principal implements BackendInterface { IUserSession $userSession, IConfig $config, IAppManager $appManager, - $principalPrefix = 'principals/users/') { + string $principalPrefix = 'principals/users/') { $this->userManager = $userManager; $this->groupManager = $groupManager; $this->shareManager = $shareManager; diff --git a/apps/dav/tests/unit/AppInfo/PluginManagerTest.php b/apps/dav/tests/unit/AppInfo/PluginManagerTest.php index ed19bdd53cd..0e4c0d20eaa 100644 --- a/apps/dav/tests/unit/AppInfo/PluginManagerTest.php +++ b/apps/dav/tests/unit/AppInfo/PluginManagerTest.php @@ -80,12 +80,12 @@ class PluginManagerTest extends TestCase { $server->method('query') ->will($this->returnValueMap([ - ['\OCA\DAV\ADavApp\PluginOne', 'dummyplugin1'], - ['\OCA\DAV\ADavApp\PluginTwo', 'dummyplugin2'], - ['\OCA\DAV\ADavApp\CollectionOne', 'dummycollection1'], - ['\OCA\DAV\ADavApp\CollectionTwo', 'dummycollection2'], - ['\OCA\DAV\ADavApp2\PluginOne', 'dummy2plugin1'], - ['\OCA\DAV\ADavApp2\CollectionOne', 'dummy2collection1'], + ['\OCA\DAV\ADavApp\PluginOne', true, 'dummyplugin1'], + ['\OCA\DAV\ADavApp\PluginTwo', true, 'dummyplugin2'], + ['\OCA\DAV\ADavApp\CollectionOne', true, 'dummycollection1'], + ['\OCA\DAV\ADavApp\CollectionTwo', true, 'dummycollection2'], + ['\OCA\DAV\ADavApp2\PluginOne', true, 'dummy2plugin1'], + ['\OCA\DAV\ADavApp2\CollectionOne', true, 'dummy2collection1'], ])); $expectedPlugins = [ diff --git a/lib/private/AppFramework/DependencyInjection/DIContainer.php b/lib/private/AppFramework/DependencyInjection/DIContainer.php index a6a9b205747..6d337bb9327 100644 --- a/lib/private/AppFramework/DependencyInjection/DIContainer.php +++ b/lib/private/AppFramework/DependencyInjection/DIContainer.php @@ -374,17 +374,12 @@ class DIContainer extends SimpleContainer implements IAppContainer { }); } - /** - * @param string $name - * @return mixed - * @throws QueryException if the query could not be resolved - */ - public function query($name) { + public function query(string $name, bool $autoload = true) { try { return $this->queryNoFallback($name); } catch (QueryException $firstException) { try { - return $this->getServer()->query($name); + return $this->getServer()->query($name, $autoload); } catch (QueryException $secondException) { if ($firstException->getCode() === 1) { throw $secondException; diff --git a/lib/private/AppFramework/Utility/SimpleContainer.php b/lib/private/AppFramework/Utility/SimpleContainer.php index 6c2844e681b..6f50523bbf6 100644 --- a/lib/private/AppFramework/Utility/SimpleContainer.php +++ b/lib/private/AppFramework/Utility/SimpleContainer.php @@ -65,7 +65,8 @@ class SimpleContainer extends Container implements IContainer { } try { - $parameters[] = $this->query($resolveName); + $builtIn = $parameter->hasType() && $parameter->getType()->isBuiltin(); + $parameters[] = $this->query($resolveName, !$builtIn); } catch (QueryException $e) { // Service not found, use the default value when available if ($parameter->isDefaultValueAvailable()) { @@ -105,23 +106,18 @@ class SimpleContainer extends Container implements IContainer { } } - - /** - * @param string $name name of the service to query for - * @return mixed registered service for the given $name - * @throws QueryException if the query could not be resolved - */ - public function query($name) { + public function query(string $name, bool $autoload = true) { $name = $this->sanitizeName($name); if ($this->offsetExists($name)) { return $this->offsetGet($name); - } else { + } else if ($autoload) { $object = $this->resolve($name); $this->registerService($name, function () use ($object) { return $object; }); return $object; } + throw new QueryException('Could not resolve ' . $name . '!'); } /** diff --git a/lib/private/ServerContainer.php b/lib/private/ServerContainer.php index 8c2b49bb085..b67b4d1e701 100644 --- a/lib/private/ServerContainer.php +++ b/lib/private/ServerContainer.php @@ -113,12 +113,7 @@ class ServerContainer extends SimpleContainer { throw new QueryException(); } - /** - * @param string $name name of the service to query for - * @return mixed registered service for the given $name - * @throws QueryException if the query could not be resolved - */ - public function query($name) { + public function query(string $name, bool $autoload = true) { $name = $this->sanitizeName($name); if (isset($this[$name])) { @@ -147,6 +142,6 @@ class ServerContainer extends SimpleContainer { } } - return parent::query($name); + return parent::query($name, $autoload); } } diff --git a/lib/public/IContainer.php b/lib/public/IContainer.php index f7ca0697671..558c72291c5 100644 --- a/lib/public/IContainer.php +++ b/lib/public/IContainer.php @@ -61,11 +61,12 @@ interface IContainer { * Look up a service for a given name in the container. * * @param string $name + * @param bool $autoload Should we try to autoload the service. If we are trying to resolve built in types this makes no sense for example * @return mixed * @throws QueryException if the query could not be resolved * @since 6.0.0 */ - public function query($name); + public function query(string $name, bool $autoload = true); /** * A value is stored in the container with it's corresponding name diff --git a/tests/lib/Contacts/ContactsMenu/ActionProviderStoreTest.php b/tests/lib/Contacts/ContactsMenu/ActionProviderStoreTest.php index 8738e19b513..fb5e815447c 100644 --- a/tests/lib/Contacts/ContactsMenu/ActionProviderStoreTest.php +++ b/tests/lib/Contacts/ContactsMenu/ActionProviderStoreTest.php @@ -81,8 +81,8 @@ class ActionProviderStoreTest extends TestCase { $this->serverContainer->expects($this->exactly(2)) ->method('query') ->will($this->returnValueMap([ - [EMailProvider::class, $provider1], - ['OCA\Contacts\Provider1', $provider2] + [EMailProvider::class, true, $provider1], + ['OCA\Contacts\Provider1', true, $provider2] ])); $providers = $this->actionProviderStore->getProviders($user); @@ -106,7 +106,7 @@ class ActionProviderStoreTest extends TestCase { $this->serverContainer->expects($this->once()) ->method('query') ->will($this->returnValueMap([ - [EMailProvider::class, $provider1], + [EMailProvider::class, true, $provider1], ])); $providers = $this->actionProviderStore->getProviders($user); |