8000 Merge branch '4.0' · fervo/symfony@347438e · GitHub
[go: up one dir, main page]

Skip to content

Commit 347438e

Browse files
committed
Merge branch '4.0'
* 4.0: fix merge Env var maps to undefined constant. [SecurityBundle] Backport test [Security] fix merge of 2.7 into 2.8 + add test case backport regression test from 3.4 do not mock the container builder or definitions fixed CS [TwigBundle] Register TwigBridge extensions first [WebProfilerBundle] Fix sub request link PhpDocExtractor::getTypes() throws fatal error when type omitted Fix misspelling variable use libsodium to run Argon2i related tests [DI] minor: use a strict comparision in setDecoratedService [HttpKernel] fix FC Follow-on to symfony#25825: Fix edge case in getParameterOption. keep the context when validating forms
2 parents f6d7419 + 99c5b77 commit 347438e

File tree

18 files changed

+148
-29
lines changed
  • DependencyInjection
  • Form
  • HttpFoundation/Tests
  • PropertyInfo
  • Security/Http
  • 18 files changed

    +148
    -29
    lines changed

    .travis.yml

    Lines changed: 8 additions & 0 deletions
    Original file line numberDiff line numberDiff line change
    @@ -133,7 +133,15 @@ before_install:
    133133
    - |
    134134
    # Install extra PHP extensions
    135135
    if [[ ! $skip ]]; then
    136+
    # install libsodium
    137+
    if [[ ! -e ~/php-ext/$(php -r "echo basename(ini_get('extension_dir'));")/libsodium/sodium.so ]]; then
    138+
    sudo add-apt-repository ppa:ondrej/php -y
    139+
    sudo apt-get update -q
    140+
    sudo apt-get install libsodium-dev -y
    141+
    fi
    142+
    136143
    tfold ext.apcu tpecl apcu-5.1.6 apcu.so
    144+
    tfold ext.libsodium tpecl libsodium sodium.so
    137145
    tfold ext.mongodb tpecl mongodb-1.4.0RC1 mongodb.so
    138146
    fi
    139147

    src/Symfony/Bundle/SecurityBundle/Tests/DependencyInjection/Fixtures/yml/argon2i_encoder.yml

    Lines changed: 1 addition & 1 deletion
    Original file line numberDiff line numberDiff line change
    @@ -1,6 +1,6 @@
    11
    security:
    22
    encoders:
    3-
    JMS\FooBundle\Entity\User6:
    3+
    JMS\FooBundle\Entity\User7:
    44
    algorithm: argon2i
    55

    66
    providers:

    src/Symfony/Bundle/SecurityBundle/Tests/Functional/UserPasswordEncoderCommandTest.php

    Lines changed: 2 additions & 2 deletions
    Original file line numberDiff line numberDiff line change
    @@ -86,7 +86,7 @@ public function testEncodePasswordArgon2i()
    8686
    $this->assertContains('Password encoding succeeded', $output);
    8787

    8888
    $encoder = new Argon2iPasswordEncoder();
    89-
    preg_match('# Encoded password\s+(\$argon2i\$[\w\d,=\$+\/]+={0,2})\s+#', $output, $matches);
    89+
    preg_match('# Encoded password\s+(\$argon2id\$[\w\d,=\$+\/]+={0,2})\s+#', $output, $matches);
    9090
    $hash = $matches[1];
    9191
    $this->assertTrue($encoder->isPasswordValid($hash, 'password', null));
    9292
    }
    @@ -250,7 +250,7 @@ protected function tearDown()
    250250
    private function setupArgon2i()
    251251
    {
    252252
    putenv('COLUMNS='.(119 + strlen(PHP_EOL)));
    253-
    $kernel = $this->createKernel(array('test_case' => 'PasswordEncode', 'root_config' => 'argon2i'));
    253+
    $kernel = $this->createKernel(array('test_case' => 'PasswordEncode', 'root_config' => 'argon2i.yml'));
    254254
    $kernel->boot();
    255255

    256256
    $application = new Application($kernel);

    src/Symfony/Bundle/TwigBundle/DependencyInjection/Compiler/TwigEnvironmentPass.php

    Lines changed: 16 additions & 4 deletions
    Original file line numberDiff line numberDiff line change
    @@ -14,6 +14,7 @@
    1414
    use Symfony\Component\DependencyInjection\Compiler\PriorityTaggedServiceTrait;
    1515
    use Symfony\Component\DependencyInjection\ContainerBuilder;
    1616
    use Symfony\Component\DependencyInjection\Compiler\CompilerPassInterface;
    17+
    use Symfony\Component\DependencyInjection\Reference;
    1718

    1819
    /**
    1920
    * Adds tagged twig.extension services to twig service.
    @@ -36,11 +37,22 @@ public function process(ContainerBuilder $container)
    3637
    // For instance, global variable definitions must be registered
    3738
    // afterward. If not, the globals from the extensions will never
    3839
    // be registered.
    39-
    $calls = $definition->getMethodCalls();
    40-
    $definition->setMethodCalls(array());
    40+
    $currentMethodCalls = $definition->getMethodCalls();
    41+
    $twigBridgeExtensionsMethodCalls = array();
    42+
    $othersExtensionsMethodCalls = array();
    4143
    foreach ($this->findAndSortTaggedServices('twig.extension', $container) as $extension) {
    42-
    $definition->addMethodCall('addExtension', array($extension));
    44+
    $methodCall = array('addExtension', array($extension));
    45+
    $extensionClass = $container->getDefinition((string) $extension)->getClass();
    46+
    47+
    if (is_string($extensionClass) && 0 === strpos($extensionClass, 'Symfony\Bridge\Twig\Extension')) {
    48+
    $twigBridgeExtensionsMethodCalls[] = $methodCall;
    49+
    } else {
    50+
    $othersExtensionsMethodCalls[] = $methodCall;
    51+
    }
    52+
    }
    53+
    54+
    if (!empty($twigBridgeExtensionsMethodCalls) || !empty($othersExtensionsMethodCalls)) {
    55+
    $definition->setMethodCalls(array_merge($twigBridgeExtensionsMethodCalls, $othersExtensionsMethodCalls, $currentMethodCalls));
    4356
    }
    44-
    $definition->setMethodCalls(array_merge($definition->getMethodCalls(), $calls));
    4557
    }
    4658
    }

    src/Symfony/Bundle/TwigBundle/Tests/DependencyInjection/Compiler/TwigEnvironmentPassTest.php

    Lines changed: 26 additions & 0 deletions
    Original file line numberDiff line numberDiff line change
    @@ -12,9 +12,11 @@
    1212
    namespace Symfony\Bundle\TwigBundle\Tests\DependencyInjection\Compiler;
    1313

    1414
    use PHPUnit\Framework\TestCase;
    15+
    use Symfony\Bridge\Twig\Extension\FormExtension;
    1516
    use Symfony\Bundle\TwigBundle\DependencyInjection\Compiler\TwigEnvironmentPass;
    1617
    use Symfony\Component\DependencyInjection\ContainerBuilder;
    1718
    use Symfony\Component\DependencyInjection\Definition;
    19+
    use Symfony\Component\DependencyInjection\Reference;
    1820

    1921
    class TwigEnvironmentPassTest extends TestCase
    2022
    {
    @@ -42,4 +44,28 @@ public function testPassWithTwoExtensionsWithPriority()
    4244
    $this->assertEquals('test_extension_2', (string) $calls[0][1][0]);
    4345
    $this->assertEquals('test_extension_1', (string) $calls[1][1][0]);
    4446
    }
    47+
    48+
    public function testTwigBridgeExtensionsAreRegisteredFirst()
    49+
    {
    50+
    $container = new ContainerBuilder();
    51+
    $twigDefinition = $container->register('twig');
    52+
    $container->register('other_extension', 'Foo\Bar')
    53+
    ->addTag('twig.extension');
    54+
    $container->register('twig_bridge_extension', FormExtension::class)
    55+
    ->addTag('twig.extension');
    56+
    57+
    $twigEnvironmentPass = new TwigEnvironmentPass();
    58+
    $twigEnvironmentPass->process($container);
    59+
    60+
    $methodCalls = $twigDefinition->getMethodCalls();
    61+
    $this->assertCount(2, $methodCalls);
    62+
    63+
    $twigBridgeExtensionReference = $methodCalls[0][1][0];
    64+
    $this->assertInstanceOf(Reference::class, $twigBridgeExtensionReference);
    65+
    $this->assertSame('twig_bridge_extension', (string) $twigBridgeExtensionReference);
    66+
    67+
    $otherExtensionReference = $methodCalls[1][1][0];
    68+
    $this->assertInstanceOf(Reference::class, $otherExtensionReference);
    69+
    $this->assertSame('other_extension', (string) $otherExtensionReference);
    70+
    }
    4571
    }

    src/Symfony/Bundle/WebProfilerBundle/Resources/views/Collector/request.html.twig

    Lines changed: 1 addition & 3 deletions
    Original file line numberDiff line numberDiff line change
    @@ -272,9 +272,7 @@
    272272
    <div class="tab-content">
    273273
    {% for child in profile.children %}
    274274
    <h3>
    275-
    <a href="{{ path('_profiler', { token: child.token }) }}">
    276-
    {{ helper.set_handler(child.getcollector('request').controller) }}
    277-
    </a>
    275+
    {{ helper.set_handler(child.getcollector('request').controller) }}
    278276
    <small>(token = <a href="{{ path('_profiler', { token: child.token }) }}">{{ child.token }}</a>)</small>
    279277
    </h3>
    280278

    src/Symfony/Component/Console/Input/ArgvInput.php

    Lines changed: 13 additions & 6 deletions
    Original file line numberDiff line numberDiff line change
    @@ -277,7 +277,11 @@ public function hasParameterOption($values, $onlyParams = false)
    277277
    return false;
    278278
    }
    279279
    foreach ($values as $value) {
    280-
    if ($token === $value || 0 === strpos($token, $value.'=')) {
    280+
    // Options with values:
    281+
    // For long options, test for '--option=' at beginning
    282+
    // For short options, test for '-o' at beginning
    283+
    $leading = 0 === strpos($value, '--') ? $value.'=' : $value;
    284+
    if ($token === $value || 0 === strpos($token, $leading)) {
    281285
    return true;
    282286
    }
    283287
    }
    @@ -301,13 +305,16 @@ public function getParameterOption($values, $default = false, $onlyParams = fals
    301305
    }
    302306

    303307
    foreach ($values as $value) {
    304-
    if ($token === $value || 0 === strpos($token, $value.'=')) {
    305-
    if (false !== $pos = strpos($token, '=')) {
    306-
    return substr($token, $pos + 1);
    307-
    } 10000
    308-
    308+
    if ($token === $value) {
    309309
    return array_shift($tokens);
    310310
    }
    311+
    // Options with values:
    312+
    // For long options, test for '--option=' at beginning
    313+
    // For short options, test for '-o' at beginning
    314+
    $leading = 0 === strpos($value, '--') ? $value.'=' : $value;
    315+
    if (0 === strpos($token, $leading)) {
    316+
    return substr($token, strlen($leading));
    317+
    }
    311318
    }
    312319
    }
    313320

    src/Symfony/Component/Console/Input/InputInterface.php

    Lines changed: 4 additions & 0 deletions
    Original file line numberDiff line numberDiff line change
    @@ -33,6 +33,8 @@ public function getFirstArgument();
    3333
    *
    3434
    * This method is to be used to introspect the input parameters
    3535
    * before they have been validated. It must be used carefully.
    36+
    * Does not necessarily return the correct result for short options
    37+
    * when multiple flags are combined in the same option.
    3638
    *
    3739
    * @param string|array $values The values to look for in the raw parameters (can be an array)
    3840
    * @param bool $onlyParams Only check real parameters, skip those following an end of options (--) signal
    @@ -46,6 +48,8 @@ public function hasParameterOption($values, $onlyParams = false);
    4648
    *
    4749
    * This method is to be used to introspect the input parameters
    4850
    * before they have been validated. It must be used carefully.
    51+
    * Does not necessarily return the correct result for short options
    52+
    * when multiple flags are combined in the same option.
    4953
    *
    5054
    * @param string|array $values The value(s) to look for in the raw parameters (can be an array)
    5155
    * @param mixed $default The default value to return if no result is found

    src/Symfony/Component/Console/Tests/Input/ArgvInputTest.php

    Lines changed: 31 additions & 0 deletions
    Original file line numberDiff line numberDiff line change
    @@ -314,6 +314,10 @@ public function testHasParameterOption()
    314314
    $input = new ArgvInput(array('cli.php', '-f', 'foo'));
    315315
    $this->assertTrue($input->hasParameterOption('-f'), '->hasParameterOption() returns true if the given short option is in the raw input');
    316316

    317+
    $input = new ArgvInput(array('cli.php', '-etest'));
    318+
    $this->assertTrue($input->hasParameterOption('-e'), '->hasParameterOption() returns true if the given short option is in the raw input');
    319+
    $this->assertFalse($input->hasParameterOption('-s'), '->hasParameterOption() returns true if the given short option is in the raw input');
    320+
    317321
    $input = new ArgvInput(array('cli.php', '--foo', 'foo'));
    318322
    $this->assertTrue($input->hasParameterOption('--foo'), '->hasParameterOption() returns true if the given short option is in the raw input');
    319323

    @@ -339,6 +343,33 @@ public function testHasParameterOptionOnlyOptions()
    339343
    $this->assertFalse($input->hasParameterOption('--foo', true), '->hasParameterOption() returns false if the given option is in the raw input but after an end of options signal');
    340344
    }
    341345

    346+
    public function testHasParameterOptionEdgeCasesAndLimitations()
    347+
    {
    348+
    $input = new ArgvInput(array('cli.php', '-fh'));
    349+
    // hasParameterOption does not know if the previous short option, -f,
    350+
    // takes a value or not. If -f takes a value, then -fh does NOT include
    351+
    // -h; Otherwise it does. Since we do not know which short options take
    352+
    // values, hasParameterOption does not support this use-case.
    353+
    $this->assertFalse($input->hasParameterOption('-h'), '->hasParameterOption() returns true if the given short option is in the raw input');
    354+
    // hasParameterOption does detect that `-fh` contains `-f`, since
    355+
    // `-f` is the first short option in the set.
    356+
    $this->assertTrue($input->hasParameterOption('-f'), '->hasParameterOption() returns true if the given short option is in the raw input');
    357+
    // The test below happens to pass, although it might make more sense
    358+
    // to disallow it, and require the use of
    359+
    // $input->hasParameterOption('-f') && $input->hasParameterOption('-h')
    360+
    // instead.
    361+
    $this->assertTrue($input->hasParameterOption('-fh'), '->hasParameterOption() returns true if the given short option is in the raw input');
    362+
    // In theory, if -fh is supported, then -hf should also work.
    363+
    // However, this is not supported.
    364+
    $this->assertFalse($input->hasParameterOption('-hf'), '->hasParameterOption() returns true if the given short option is in the raw input');
    365+
    366+
    $input = new ArgvInput(array('cli.php', '-f', '-h'));
    367+
    // If hasParameterOption('-fh') is supported for 'cli.php -fh', then
    368+
    // one might also expect that it should also be supported for
    369+
    // 'cli.php -f -h'. However, this is not supported.
    370+
    $this->assertFalse($input->hasParameterOption('-fh'), '->hasParameterOption() returns true if the given short option is in the raw input');
    371+
    }
    372+
    342373
    public function testToString()
    343374
    {
    344375
    $input = new ArgvInput(array('cli.php', '-f', 'foo'));

    src/Symfony/Component/DependencyInjection/Definition.php

    Lines changed: 1 addition & 1 deletion
    Original file line numberDiff line numberDiff line change
    @@ -128,7 +128,7 @@ public function getFactory()
    128128
    */
    129129
    public function setDecoratedService($id, $renamedId = null, $priority = 0)
    130130
    {
    131-
    if ($renamedId && $id == $renamedId) {
    131+
    if ($renamedId && $id === $renamedId) {
    132132
    throw new InvalidArgumentException(sprintf('The decorated service inner name for "%s" must be different than the service name itself.', $id));
    133133
    }
    134134

    0 commit comments

    Comments
     (0)
    0