Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Commit e00b0f3

Browse filesBrowse files
committed
[DependencyInjection] fixes #9815 Syntax error in PHP dumper
1 parent baaf9b6 commit e00b0f3
Copy full SHA for e00b0f3

File tree

Expand file treeCollapse file tree

9 files changed

+75
-61
lines changed
Filter options
Expand file treeCollapse file tree

9 files changed

+75
-61
lines changed

‎src/Symfony/Component/DependencyInjection/Dumper/PhpDumper.php

Copy file name to clipboardExpand all lines: src/Symfony/Component/DependencyInjection/Dumper/PhpDumper.php
+15-3Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -490,7 +490,7 @@ private function addServiceConfigurator($id, $definition, $variableName = 'insta
490490
$class = $this->dumpValue($callable[0]);
491491
// If the class is a string we can optimize call_user_func away
492492
if (strpos($class, "'") === 0) {
493-
return sprintf(" \%s::%s(\$%s);\n", substr($class, 1, -1), $callable[1], $variableName);
493+
return sprintf(" %s::%s(\$%s);\n", $this->dumpLiteralClass($class), $callable[1], $variableName);
494494
}
495495

496496
return sprintf(" call_user_func(array(%s, '%s'), \$%s);\n", $this->dumpValue($callable[0]), $callable[1], $variableName);
@@ -701,7 +701,7 @@ private function addNewInstance($id, Definition $definition, $return, $instantia
701701

702702
// If the class is a string we can optimize call_user_func away
703703
if (strpos($class, "'") === 0) {
704-
return sprintf(" $return{$instantiation}\%s::%s(%s);\n", substr($class, 1, -1), $definition->getFactoryMethod(), $arguments ? implode(', ', $arguments) : '');
704+
return sprintf(" $return{$instantiation}%s::%s(%s);\n", $this->dumpLiteralClass($class), $definition->getFactoryMethod(), $arguments ? implode(', ', $arguments) : '');
705705
}
706706

707707
return sprintf(" $return{$instantiation}call_user_func(array(%s, '%s')%s);\n", $this->dumpValue($definition->getFactoryClass()), $definition->getFactoryMethod(), $arguments ? ', '.implode(', ', $arguments) : '');
@@ -718,7 +718,7 @@ private function addNewInstance($id, Definition $definition, $return, $instantia
718718
return sprintf(" \$class = %s;\n\n $return{$instantiation}new \$class(%s);\n", $class, implode(', ', $arguments));
719719
}
720720

721-
return sprintf(" $return{$instantiation}new \\%s(%s);\n", substr(str_replace('\\\\', '\\', $class), 1, -1), implode(', ', $arguments));
721+
return sprintf(" $return{$instantiation}new %s(%s);\n", $this->dumpLiteralClass($class), implode(', ', $arguments));
722722
}
723723

724724
/**
@@ -1248,6 +1248,18 @@ private function dumpValue($value, $interpolate = true)
12481248
}
12491249
}
12501250

1251+
/**
1252+
* Dumps a string to a literal (aka PHP Code) class value.
1253+
*
1254+
* @param string $class
1255+
*
1256+
* @return string
1257+
*/
1258+
private function dumpLiteralClass($class)
1259+
{
1260+
return '\\'.substr(str_replace('\\\\', '\\', $class), 1, -1);
1261+
}
1262+
12511263
/**
12521264
* Dumps a parameter
12531265
*

‎src/Symfony/Component/DependencyInjection/Tests/ContainerBuilderTest.php

Copy file name to clipboardExpand all lines: src/Symfony/Component/DependencyInjection/Tests/ContainerBuilderTest.php
+24-24Lines changed: 24 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ public function testDefinitions()
4040
{
4141
$builder = new ContainerBuilder();
4242
$definitions = array(
43-
'foo' => new Definition('FooClass'),
43+
'foo' => new Definition('Bar\FooClass'),
4444
'bar' => new Definition('BarClass'),
4545
);
4646
$builder->setDefinitions($definitions);
@@ -69,7 +69,7 @@ public function testDefinitions()
6969
public function testRegister()
7070
{
7171
$builder = new ContainerBuilder();
72-
$builder->register('foo', 'FooClass');
72+
$builder->register('foo', 'Bar\FooClass');
7373
$this->assertTrue($builder->hasDefinition('foo'), '->register() registers a new service definition');
7474
$this->assertInstanceOf('Symfony\Component\DependencyInjection\Definition', $builder->getDefinition('foo'), '->register() returns the newly created Definition instance');
7575
}
@@ -81,7 +81,7 @@ public function testHas()
8181
{
8282
$builder = new ContainerBuilder();
8383
$this->assertFalse($builder->has('foo'), '->has() returns false if the service does not exist');
84-
$builder->register('foo', 'FooClass');
84+
$builder->register('foo', 'Bar\FooClass');
8585
$this->assertTrue($builder->has('foo'), '->has() returns true if a service definition exists');
8686
$builder->set('bar', new \stdClass());
8787
$this->assertTrue($builder->has('bar'), '->has() returns true if a service exists');
@@ -259,11 +259,11 @@ public function testAddGetCompilerPass()
259259
public function testCreateService()
260260
{
261261
$builder = new ContainerBuilder();
262-
$builder->register('foo1', 'FooClass')->setFile(__DIR__.'/Fixtures/includes/foo.php');
263-
$this->assertInstanceOf('\FooClass', $builder->get('foo1'), '->createService() requires the file defined by the service definition');
264-
$builder->register('foo2', 'FooClass')->setFile(__DIR__.'/Fixtures/includes/%file%.php');
262+
$builder->register('foo1', 'Bar\FooClass')->setFile(__DIR__.'/Fixtures/includes/foo.php');
263+
$this->assertInstanceOf('\Bar\FooClass', $builder->get('foo1'), '->createService() requires the file defined by the service definition');
264+
$builder->register('foo2', 'Bar\FooClass')->setFile(__DIR__.'/Fixtures/includes/%file%.php');
265265
$builder->setParameter('file', 'foo');
266-
$this->assertInstanceOf('\FooClass', $builder->get('foo2'), '->createService() replaces parameters in the file provided by the service definition');
266+
$this->assertInstanceOf('\Bar\FooClass', $builder->get('foo2'), '->createService() replaces parameters in the file provided by the service definition');
267267
}
268268

269269
/**
@@ -273,13 +273,13 @@ public function testCreateProxyWithRealServiceInstantiator()
273273
{
274274
$builder = new ContainerBuilder();
275275

276-
$builder->register('foo1', 'FooClass')->setFile(__DIR__.'/Fixtures/includes/foo.php');
276+
$builder->register('foo1', 'Bar\FooClass')->setFile(__DIR__.'/Fixtures/includes/foo.php');
277277
$builder->getDefinition('foo1')->setLazy(true);
278278

279279
$foo1 = $builder->get('foo1');
280280

281281
$this->assertSame($foo1, $builder->get('foo1'), 'The same proxy is retrieved on multiple subsequent calls');
282-
$this->assertSame('FooClass', get_class($foo1));
282+
$this->assertSame('Bar\FooClass', get_class($foo1));
283283
}
284284

285285
/**
@@ -300,7 +300,7 @@ public function testCreateServiceArguments()
300300
{
301301
$builder = new ContainerBuilder();
302302
$builder->register('bar', 'stdClass');
303-
$builder->register('foo1', 'FooClass')->addArgument(array('foo' => '%value%', '%value%' => 'foo', new Reference('bar'), '%%unescape_it%%'));
303+
$builder->register('foo1', 'Bar\FooClass')->addArgument(array('foo' => '%value%', '%value%' => 'foo', new Reference('bar'), '%%unescape_it%%'));
304304
$builder->setParameter('value', 'bar');
305305
$this->assertEquals(array('foo' => 'bar', 'bar' => 'foo', $builder->get('bar'), '%unescape_it%'), $builder->get('foo1')->arguments, '->createService() replaces parameters and service references in the arguments provided by the service definition');
306306
}
@@ -312,7 +312,7 @@ public function testCreateServiceFactoryMethod()
312312
{
313313
$builder = new ContainerBuilder();
314314
$builder->register('bar', 'stdClass');
315-
$builder->register('foo1', 'FooClass')->setFactoryClass('FooClass')->setFactoryMethod('getInstance')->addArgument(array('foo' => '%value%', '%value%' => 'foo', new Reference('bar')));
315+
$builder->register('foo1', 'Bar\FooClass')->setFactoryClass('Bar\FooClass')->setFactoryMethod('getInstance')->addArgument(array('foo' => '%value%', '%value%' => 'foo', new Reference('bar')));
316316
$builder->setParameter('value', 'bar');
317317
$this->assertTrue($builder->get('foo1')->called, '->createService() calls the factory method to create the service instance');
318318
$this->assertEquals(array('foo' => 'bar', 'bar' => 'foo', $builder->get('bar')), $builder->get('foo1')->arguments, '->createService() passes the arguments to the factory method');
@@ -337,7 +337,7 @@ public function testCreateServiceMethodCalls()
337337
{
338338
$builder = new ContainerBuilder();
339339
$builder->register('bar', 'stdClass');
340-
$builder->register('foo1', 'FooClass')->addMethodCall('setBar', array(array('%value%', new Reference('bar'))));
340+
$builder->register('foo1', 'Bar\FooClass')->addMethodCall('setBar', array(array('%value%', new Reference('bar'))));
341341
$builder->setParameter('value', 'bar');
342342
$this->assertEquals(array('bar', $builder->get('bar')), $builder->get('foo1')->bar, '->createService() replaces the values in the method calls arguments');
343343
}
@@ -348,23 +348,23 @@ public function testCreateServiceMethodCalls()
348348
public function testCreateServiceConfigurator()
349349
{
350350
$builder = new ContainerBuilder();
351-
$builder->register('foo1', 'FooClass')->setConfigurator('sc_configure');
351+
$builder->register('foo1', 'Bar\FooClass')->setConfigurator('sc_configure');
352352
$this->assertTrue($builder->get('foo1')->configured, '->createService() calls the configurator');
353353

354-
$builder->register('foo2', 'FooClass')->setConfigurator(array('%class%', 'configureStatic'));
354+
$builder->register('foo2', 'Bar\FooClass')->setConfigurator(array('%class%', 'configureStatic'));
355355
$builder->setParameter('class', 'BazClass');
356356
$this->assertTrue($builder->get('foo2')->configured, '->createService() calls the configurator');
357357

358358
$builder->register('baz', 'BazClass');
359-
$builder->register('foo3', 'FooClass')->setConfigurator(array(new Reference('baz'), 'configure'));
359+
$builder->register('foo3', 'Bar\FooClass')->setConfigurator(array(new Reference('baz'), 'configure'));
360360
$this->assertTrue($builder->get('foo3')->configured, '->createService() calls the configurator');
361361

362-
$builder->register('foo4', 'FooClass')->setConfigurator('foo');
362+
$builder->register('foo4', 'Bar\FooClass')->setConfigurator('foo');
363363
try {
364364
$builder->get('foo4');
365365
$this->fail('->createService() throws an InvalidArgumentException if the configure callable is not a valid callable');
366366
} catch (\InvalidArgumentException $e) {
367-
$this->assertEquals('The configure callable for class "FooClass" is not a callable.', $e->getMessage(), '->createService() throws an InvalidArgumentException if the configure callable is not a valid callable');
367+
$this->assertEquals('The configure callable for class "Bar\FooClass" is not a callable.', $e->getMessage(), '->createService() throws an InvalidArgumentException if the configure callable is not a valid callable');
368368
}
369369
}
370370

@@ -375,7 +375,7 @@ public function testCreateServiceConfigurator()
375375
public function testCreateSyntheticService()
376376
{
377377
$builder = new ContainerBuilder();
378-
$builder->register('foo', 'FooClass')->setSynthetic(true);
378+
$builder->register('foo', 'Bar\FooClass')->setSynthetic(true);
379379
$builder->get('foo');
380380
}
381381

@@ -384,7 +384,7 @@ public function testCreateServiceWithExpression()
384384
$builder = new ContainerBuilder();
385385
$builder->setParameter('bar', 'bar');
386386
$builder->register('bar', 'BarClass');
387-
$builder->register('foo', 'FooClass')->addArgument(array('foo' => new Expression('service("bar").foo ~ parameter("bar")')));
387+
$builder->register('foo', 'Bar\FooClass')->addArgument(array('foo' => new Expression('service("bar").foo ~ parameter("bar")')));
388388
$this->assertEquals('foobar', $builder->get('foo')->arguments['foo']);
389389
}
390390

@@ -394,7 +394,7 @@ public function testCreateServiceWithExpression()
394394
public function testResolveServices()
395395
{
396396
$builder = new ContainerBuilder();
397-
$builder->register('foo', 'FooClass');
397+
$builder->register('foo', 'Bar\FooClass');
398398
$this->assertEquals($builder->get('foo'), $builder->resolveServices(new Reference('foo')), '->resolveServices() resolves service references to service instances');
399399
$this->assertEquals(array('foo' => array('foo', $builder->get('foo'))), $builder->resolveServices(array('foo' => array('foo', new Reference('foo')))), '->resolveServices() resolves service references to service instances in nested arrays');
400400
$this->assertEquals($builder->get('foo'), $builder->resolveServices(new Expression('service("foo")')), '->resolveServices() resolves expressions');
@@ -427,7 +427,7 @@ public function testMerge()
427427

428428
$container = new ContainerBuilder();
429429
$container->setResourceTracking(false);
430-
$container->register('foo', 'FooClass');
430+
$container->register('foo', 'Bar\FooClass');
431431
$container->register('bar', 'BarClass');
432432
$config = new ContainerBuilder();
433433
$config->setDefinition('baz', new Definition('BazClass'));
@@ -441,7 +441,7 @@ public function testMerge()
441441

442442
$container = new ContainerBuilder();
443443
$container->setResourceTracking(false);
444-
$container->register('foo', 'FooClass');
444+
$container->register('foo', 'Bar\FooClass');
445445
$config->setDefinition('foo', new Definition('BazClass'));
446446
$container->merge($config);
447447
$this->assertEquals('BazClass', $container->getDefinition('foo')->getClass(), '->merge() overrides already defined services');
@@ -466,7 +466,7 @@ public function testfindTaggedServiceIds()
466466
{
467467
$builder = new ContainerBuilder();
468468
$builder
469-
->register('foo', 'FooClass')
469+
->register('foo', 'Bar\FooClass')
470470
->addTag('foo', array('foo' => 'foo'))
471471
->addTag('bar', array('bar' => 'bar'))
472472
->addTag('foo', array('foofoo' => 'foofoo'))
@@ -486,7 +486,7 @@ public function testfindTaggedServiceIds()
486486
public function testFindDefinition()
487487
{
488488
$container = new ContainerBuilder();
489-
$container->setDefinition('foo', $definition = new Definition('FooClass'));
489+
$container->setDefinition('foo', $definition = new Definition('Bar\FooClass'));
490490
$container->setAlias('bar', 'foo');
491491
$container->setAlias('foobar', 'bar');
492492
$this->assertEquals($definition, $container->findDefinition('foobar'), '->findDefinition() returns a Definition');

‎src/Symfony/Component/DependencyInjection/Tests/Fixtures/containers/container9.php

Copy file name to clipboardExpand all lines: src/Symfony/Component/DependencyInjection/Tests/Fixtures/containers/container9.php
+5-5Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -10,10 +10,10 @@
1010

1111
$container = new ContainerBuilder();
1212
$container->
13-
register('foo', 'FooClass')->
13+
register('foo', 'Bar\FooClass')->
1414
addTag('foo', array('foo' => 'foo'))->
1515
addTag('foo', array('bar' => 'bar'))->
16-
setFactoryClass('FooClass')->
16+
setFactoryClass('Bar\\FooClass')->
1717
setFactoryMethod('getInstance')->
1818
setArguments(array('foo', new Reference('foo.baz'), array('%foo%' => 'foo is %foo%', 'foobar' => '%foo%'), true, new Reference('service_container')))->
1919
setProperties(array('foo' => 'bar', 'moo' => new Reference('foo.baz')))->
@@ -22,7 +22,7 @@
2222
setConfigurator('sc_configure')
2323
;
2424
$container->
25-
register('bar', 'FooClass')->
25+
register('bar', 'Bar\FooClass')->
2626
setArguments(array('foo', new Reference('foo.baz'), new Parameter('foo_bar')))->
2727
setScope('container')->
2828
setConfigurator(array(new Reference('foo.baz'), 'configure'))
@@ -40,13 +40,13 @@
4040
$container->getParameterBag()->clear();
4141
$container->getParameterBag()->add(array(
4242
'baz_class' => 'BazClass',
43-
'foo_class' => 'FooClass',
43+
'foo_class' => 'Bar\FooClass',
4444
'foo' => 'bar',
4545
));
4646
$container->setAlias('alias_for_foo', 'foo');
4747
$container->setAlias('alias_for_alias', 'alias_for_foo');
4848
$container->
49-
register('method_call1', 'FooClass')->
49+
register('method_call1', 'Bar\FooClass')->
5050
setFile(realpath(__DIR__.'/../includes/foo.php'))->
5151
addMethodCall('setBar', array(new Reference('foo')))->
5252
addMethodCall('setBar', array(new Reference('foo2', ContainerInterface::NULL_ON_INVALID_REFERENCE)))->

‎src/Symfony/Component/DependencyInjection/Tests/Fixtures/graphviz/services9.dot

Copy file name to clipboardExpand all lines: src/Symfony/Component/DependencyInjection/Tests/Fixtures/graphviz/services9.dot
+4-4Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,11 @@ digraph sc {
33
node [fontsize="11" fontname="Arial" shape="record"];
44
edge [fontsize="9" fontname="Arial" color="grey" arrowhead="open" arrowsize="0.5"];
55

6-
node_foo [label="foo (alias_for_foo)\nFooClass\n", shape=record, fillcolor="#eeeeee", style="filled"];
7-
node_bar [label="bar\nFooClass\n", shape=record, fillcolor="#eeeeee", style="filled"];
6+
node_foo [label="foo (alias_for_foo)\nBar\\FooClass\n", shape=record, fillcolor="#eeeeee", style="filled"];
7+
node_bar [label="bar\nBar\\FooClass\n", shape=record, fillcolor="#eeeeee", style="filled"];
88
node_foo_baz [label="foo.baz\nBazClass\n", shape=record, fillcolor="#eeeeee", style="filled"];
9-
node_foo_bar [label="foo_bar\nFooClass\n", shape=record, fillcolor="#eeeeee", style="dotted"];
10-
node_method_call1 [label="method_call1\nFooClass\n", shape=record, fillcolor="#eeeeee", style="filled"];
9+
node_foo_bar [label="foo_bar\nBar\\FooClass\n", shape=record, fillcolor="#eeeeee", style="dotted"];
10+
node_method_call1 [label="method_call1\nBar\\FooClass\n", shape=record, fillcolor="#eeeeee", style="filled"];
1111
node_factory_service [label="factory_service\nBar\n", shape=record, fillcolor="#eeeeee", style="filled"];
1212
node_foo_with_inline [label="foo_with_inline\nFoo\n", shape=record, fillcolor="#eeeeee", style="filled"];
1313
node_inlined [label="inlined\nBar\n", shape=record, fillcolor="#eeeeee", style="filled"];

‎src/Symfony/Component/DependencyInjection/Tests/Fixtures/includes/foo.php

Copy file name to clipboardExpand all lines: src/Symfony/Component/DependencyInjection/Tests/Fixtures/includes/foo.php
+2Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
<?php
22

3+
namespace Bar;
4+
35
class FooClass
46
{
57
public $foo, $moo;

‎src/Symfony/Component/DependencyInjection/Tests/Fixtures/php/services9.php

Copy file name to clipboardExpand all lines: src/Symfony/Component/DependencyInjection/Tests/Fixtures/php/services9.php
+7-7Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -49,13 +49,13 @@ public function __construct()
4949
* This service is shared.
5050
* This method always returns the same instance of the service.
5151
*
52-
* @return FooClass A FooClass instance.
52+
* @return Bar\FooClass A Bar\FooClass instance.
5353
*/
5454
protected function getBarService()
5555
{
5656
$a = $this->get('foo.baz');
5757

58-
$this->services['bar'] = $instance = new \FooClass('foo', $a, $this->getParameter('foo_bar'));
58+
$this->services['bar'] = $instance = new \Bar\FooClass('foo', $a, $this->getParameter('foo_bar'));
5959

6060
$a->configure($instance);
6161

@@ -132,13 +132,13 @@ protected function getFactoryServiceService()
132132
* This service is shared.
133133
* This method always returns the same instance of the service.
134134
*
135-
* @return FooClass A FooClass instance.
135+
* @return Bar\FooClass A Bar\FooClass instance.
136136
*/
137137
protected function getFooService()
138138
{
139139
$a = $this->get('foo.baz');
140140

141-
$this->services['foo'] = $instance = \FooClass::getInstance('foo', $a, array($this->getParameter('foo') => 'foo is '.$this->getParameter('foo').'', 'foobar' => $this->getParameter('foo')), true, $this);
141+
$this->services['foo'] = $instance = \Bar\FooClass::getInstance('foo', $a, array($this->getParameter('foo') => 'foo is '.$this->getParameter('foo').'', 'foobar' => $this->getParameter('foo')), true, $this);
142142

143143
$instance->setBar($this->get('bar'));
144144
$instance->initialize();
@@ -201,13 +201,13 @@ protected function getFooWithInlineService()
201201
* This service is shared.
202202
* This method always returns the same instance of the service.
203203
*
204-
* @return FooClass A FooClass instance.
204+
* @return Bar\FooClass A Bar\FooClass instance.
205205
*/
206206
protected function getMethodCall1Service()
207207
{
208208
require_once '%path%foo.php';
209209

210-
$this->services['method_call1'] = $instance = new \FooClass();
210+
$this->services['method_call1'] = $instance = new \Bar\FooClass();
211211

212212
$instance->setBar($this->get('foo'));
213213
$instance->setBar($this->get('foo2', ContainerInterface::NULL_ON_INVALID_REFERENCE));
@@ -297,7 +297,7 @@ protected function getDefaultParameters()
297297
{
298298
return array(
299299
'baz_class' => 'BazClass',
300-
'foo_class' => 'FooClass',
300+
'foo_class' => 'Bar\\FooClass',
301301
'foo' => 'bar',
302302
);
303303
}

0 commit comments

Comments
0 (0)
Morty Proxy This is a proxified and sanitized view of the page, visit original site.