Browse Source

Merge pull request #15816 from nextcloud/enh/do_not_try_to_instantiate_builtintypes

Do not autoload built in types
tags/v17.0.0beta1
Roeland Jago Douma 5 years ago
parent
commit
bc43718f22
No account linked to committer's email address

+ 1
- 1
apps/dav/lib/CalDAV/CalDavBackend.php View File

@@ -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;

+ 1
- 1
apps/dav/lib/Connector/Sabre/Principal.php View File

@@ -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;

+ 6
- 6
apps/dav/tests/unit/AppInfo/PluginManagerTest.php View File

@@ -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 = [

+ 2
- 7
lib/private/AppFramework/DependencyInjection/DIContainer.php View File

@@ -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;

+ 5
- 9
lib/private/AppFramework/Utility/SimpleContainer.php View File

@@ -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 . '!');
}

/**

+ 2
- 7
lib/private/ServerContainer.php View File

@@ -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);
}
}

+ 2
- 1
lib/public/IContainer.php View File

@@ -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

+ 3
- 3
tests/lib/Contacts/ContactsMenu/ActionProviderStoreTest.php View File

@@ -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…
Cancel
Save