Merge pull request #15816 from nextcloud/enh/do_not_try_to_instantiate_builtintypes
Do not autoload built in types
This commit is contained in:
commit
bc43718f22
8 changed files with 22 additions and 35 deletions
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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 = [
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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 . '!');
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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);
|
||||
|
|
Loading…
Reference in a new issue