Sanitize class names before registerService/query
Leading backslashes are removed, so a `registerService('\\OC\\Foo')` can still be resolved with `query('OC\\Foo')`.
This commit is contained in:
parent
a07254856c
commit
182bc17aeb
|
@ -99,6 +99,7 @@ class SimpleContainer extends Container implements IContainer {
|
|||
* @throws QueryException if the query could not be resolved
|
||||
*/
|
||||
public function query($name) {
|
||||
$name = $this->sanitizeName($name);
|
||||
if ($this->offsetExists($name)) {
|
||||
return $this->offsetGet($name);
|
||||
} else {
|
||||
|
@ -128,6 +129,7 @@ class SimpleContainer extends Container implements IContainer {
|
|||
* @param bool $shared
|
||||
*/
|
||||
public function registerService($name, Closure $closure, $shared = true) {
|
||||
$name = $this->sanitizeName($name);
|
||||
if (isset($this[$name])) {
|
||||
unset($this[$name]);
|
||||
}
|
||||
|
@ -151,4 +153,12 @@ class SimpleContainer extends Container implements IContainer {
|
|||
});
|
||||
}
|
||||
|
||||
/*
|
||||
* @param string $name
|
||||
* @return string
|
||||
*/
|
||||
protected function sanitizeName($name) {
|
||||
return ltrim($name, '\\');
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -167,6 +167,25 @@ class SimpleContainerTest extends \Test\TestCase {
|
|||
$this->assertEquals('abc', $this->container->query('test1'));
|
||||
}
|
||||
|
||||
public function sanitizeNameProvider() {
|
||||
return [
|
||||
['ABC\\Foo', 'ABC\\Foo'],
|
||||
['\\ABC\\Foo', '\\ABC\\Foo'],
|
||||
['\\ABC\\Foo', 'ABC\\Foo'],
|
||||
['ABC\\Foo', '\\ABC\\Foo'],
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* @dataProvider sanitizeNameProvider
|
||||
*/
|
||||
public function testSanitizeName($register, $query) {
|
||||
$this->container->registerService($register, function() {
|
||||
return 'abc';
|
||||
});
|
||||
$this->assertEquals('abc', $this->container->query($query));
|
||||
}
|
||||
|
||||
/**
|
||||
* @expectedException \OCP\AppFramework\QueryException
|
||||
*/
|
||||
|
|
Loading…
Reference in New Issue