From e3fb107dbbb00bb42acee593efde2ae1d5f59e87 Mon Sep 17 00:00:00 2001 From: Greg Anderson Date: Mon, 12 Feb 2018 14:05:44 -0800 Subject: [PATCH 1/4] Fixes #26136: Avoid emitting warning when hasParameterOption / getParameterOption is passed invalid parameters. --- src/Symfony/Component/Console/Input/ArgvInput.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Symfony/Component/Console/Input/ArgvInput.php b/src/Symfony/Component/Console/Input/ArgvInput.php index da064598d0741..fdbc5c66a3e28 100644 --- a/src/Symfony/Component/Console/Input/ArgvInput.php +++ b/src/Symfony/Component/Console/Input/ArgvInput.php @@ -283,7 +283,7 @@ public function hasParameterOption($values) // For long options, test for '--option=' at beginning // For short options, test for '-o' at beginning $leading = 0 === strpos($value, '--') ? $value.'=' : $value; - if ($token === $value || 0 === strpos($token, $leading)) { + if ($token === $value || !empty($leading) && 0 === strpos($token, $leading)) { return true; } } @@ -311,7 +311,7 @@ public function getParameterOption($values, $default = false) // For long options, test for '--option=' at beginning // For short options, test for '-o' at beginning $leading = 0 === strpos($value, '--') ? $value.'=' : $value; - if (0 === strpos($token, $leading)) { + if (!empty($leading) && 0 === strpos($token, $leading)) { return substr($token, strlen($leading)); } } From 242e6fc2abae560957b53aa2b292491b539dff54 Mon Sep 17 00:00:00 2001 From: Greg Anderson Date: Tue, 13 Feb 2018 07:19:15 -0800 Subject: [PATCH 2/4] Use a !== yoda-conditional instead of 'empty' to match Symfony code style. --- src/Symfony/Component/Console/Input/ArgvInput.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Symfony/Component/Console/Input/ArgvInput.php b/src/Symfony/Component/Console/Input/ArgvInput.php index fdbc5c66a3e28..62c658b4f9c6a 100644 --- a/src/Symfony/Component/Console/Input/ArgvInput.php +++ b/src/Symfony/Component/Console/Input/ArgvInput.php @@ -283,7 +283,7 @@ public function hasParameterOption($values) // For long options, test for '--option=' at beginning // For short options, test for '-o' at beginning $leading = 0 === strpos($value, '--') ? $value.'=' : $value; - if ($token === $value || !empty($leading) && 0 === strpos($token, $leading)) { + if ($token === $value || '' !== $leading && 0 === strpos($token, $leading)) { return true; } } @@ -311,7 +311,7 @@ public function getParameterOption($values, $default = false) // For long options, test for '--option=' at beginning // For short options, test for '-o' at beginning $leading = 0 === strpos($value, '--') ? $value.'=' : $value; - if (!empty($leading) && 0 === strpos($token, $leading)) { + if ('' !== $leading && 0 === strpos($token, $leading)) { return substr($token, strlen($leading)); } } From 47d0e93d85daee7db3050e787978441ced1bb802 Mon Sep 17 00:00:00 2001 From: Greg Anderson Date: Wed, 14 Feb 2018 11:24:01 -0800 Subject: [PATCH 3/4] Test to ensure that getParameterOption / hasParameterOption throws no warnings. --- .../Console/Tests/Input/ArgvInputTest.php | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/src/Symfony/Component/Console/Tests/Input/ArgvInputTest.php b/src/Symfony/Component/Console/Tests/Input/ArgvInputTest.php index 04f5ce3157c44..513f4f3a6a0a8 100644 --- a/src/Symfony/Component/Console/Tests/Input/ArgvInputTest.php +++ b/src/Symfony/Component/Console/Tests/Input/ArgvInputTest.php @@ -337,6 +337,21 @@ public function testHasParameterOptionEdgeCasesAndLimitations() $this->assertFalse($input->hasParameterOption('-fh'), '->hasParameterOption() returns true if the given short option is in the raw input'); } + public function testNoWarningOnInvalidParameterOption() + { + $input = new ArgvInput(array('cli.php', '-edev')); + + // Control. + $this->assertTrue($input->hasParameterOption(array('-e', ''))); + // No warning is thrown if https://github.com/symfony/symfony/pull/26156 is fixed + $this->assertFalse($input->hasParameterOption(array('-m', ''))); + + // Control. + $this->assertEquals('dev', $input->getParameterOption(array('-e', ''))); + // No warning is thrown if https://github.com/symfony/symfony/pull/26156 is fixed + $this->assertEquals('', $input->getParameterOption(array('-m', ''))); + } + public function testToString() { $input = new ArgvInput(array('cli.php', '-f', 'foo')); From 2b41dbb4d675b3883b63e7da53dafc391d6267a0 Mon Sep 17 00:00:00 2001 From: Greg Anderson Date: Thu, 15 Feb 2018 08:58:05 -0800 Subject: [PATCH 4/4] Fix type of expected value in getParameterOption test. --- src/Symfony/Component/Console/Tests/Input/ArgvInputTest.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Symfony/Component/Console/Tests/Input/ArgvInputTest.php b/src/Symfony/Component/Console/Tests/Input/ArgvInputTest.php index 513f4f3a6a0a8..c2a277a93fa78 100644 --- a/src/Symfony/Component/Console/Tests/Input/ArgvInputTest.php +++ b/src/Symfony/Component/Console/Tests/Input/ArgvInputTest.php @@ -349,7 +349,7 @@ public function testNoWarningOnInvalidParameterOption() // Control. $this->assertEquals('dev', $input->getParameterOption(array('-e', ''))); // No warning is thrown if https://github.com/symfony/symfony/pull/26156 is fixed - $this->assertEquals('', $input->getParameterOption(array('-m', ''))); + $this->assertFalse($input->getParameterOption(array('-m', ''))); } public function testToString()