Skip to content

Commit

Permalink
Fix issue symfony#3251: Check attribute type of service tags
Browse files Browse the repository at this point in the history
The attributes of service tags have to be of a scalar type.
It was possible to add arrays here with yaml-configuration.
  • Loading branch information
phreaknerd committed Apr 13, 2012
1 parent 3bd2e01 commit 3ae826a
Show file tree
Hide file tree
Showing 3 changed files with 24 additions and 0 deletions.
Expand Up @@ -216,6 +216,12 @@ private function parseDefinition($id, $service, $file)
$name = $tag['name'];
unset($tag['name']);

foreach ($tag as $attribute => $value) {
if (!is_scalar($value)) {
throw new InvalidArgumentException(sprintf('A "tags" attribute must be of a scalar-type for service "%s", tag "%s" in %s.', $id, $name, $file));
}
}

$definition->addTag($name, $tag);
}
}
Expand Down
@@ -0,0 +1,6 @@
services:
foo_service:
class: FooClass
tags:
# tag-attribute is not a scalar
- { name: foo, foo: { foo: foo, bar: bar } }
Expand Up @@ -185,4 +185,16 @@ public function testTagWithoutNameThrowsException()
$this->assertStringStartsWith('A "tags" entry is missing a "name" key for service ', $e->getMessage(), '->load() throws an InvalidArgumentException if a tag is missing the name key');
}
}

public function testTagWithAttributeArrayThrowsException()
{
$loader = new YamlFileLoader(new ContainerBuilder(), new FileLocator(self::$fixturesPath.'/yaml'));
try {
$loader->load('badtag3.yml');
$this->fail('->load() should throw an exception when a tag-attribute is not a scalar');
} catch (\Exception $e) {
$this->assertInstanceOf('Symfony\Component\DependencyInjection\Exception\InvalidArgumentException', $e, '->load() throws an InvalidArgumentException if a tag-attribute is not a scalar');
$this->assertStringStartsWith('A "tags" attribute must be of a scalar-type for service ', $e->getMessage(), '->load() throws an InvalidArgumentException if a tag-attribute is not a scalar');
}
}
}

0 comments on commit 3ae826a

Please sign in to comment.