summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRoeland Jago Douma <rullzer@users.noreply.github.com>2019-06-05 09:01:59 +0200
committerGitHub <noreply@github.com>2019-06-05 09:01:59 +0200
commitbc43718f22192016a608098350585d4c0d3cf0d2 (patch)
tree5ddc4eeadee79baa3118307a65f6112a88adc281
parent05058b0135813c4bfc355486e04e2324e2244078 (diff)
parent49361c40e26d0235572c83f98f48f876027ae835 (diff)
downloadnextcloud-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.php2
-rw-r--r--apps/dav/lib/Connector/Sabre/Principal.php2
-rw-r--r--apps/dav/tests/unit/AppInfo/PluginManagerTest.php12
-rw-r--r--lib/private/AppFramework/DependencyInjection/DIContainer.php9
-rw-r--r--lib/private/AppFramework/Utility/SimpleContainer.php14
-rw-r--r--lib/private/ServerContainer.php9
-rw-r--r--lib/public/IContainer.php3
-rw-r--r--tests/lib/Contacts/ContactsMenu/ActionProviderStoreTest.php6
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);