From 09bb602035d2fff37cf207646b079199aebe1753 Mon Sep 17 00:00:00 2001 From: Javier Eguiluz Date: Mon, 31 Jul 2017 16:54:24 +0200 Subject: [PATCH 1/3] Fixed the escaping of back slashes and << in console output --- src/Symfony/Component/Console/Formatter/OutputFormatter.php | 6 +++--- .../Console/Tests/Formatter/OutputFormatterTest.php | 3 +++ 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/src/Symfony/Component/Console/Formatter/OutputFormatter.php b/src/Symfony/Component/Console/Formatter/OutputFormatter.php index dc192711e6093..e66e34292e395 100644 --- a/src/Symfony/Component/Console/Formatter/OutputFormatter.php +++ b/src/Symfony/Component/Console/Formatter/OutputFormatter.php @@ -50,7 +50,7 @@ public static function escapeTrailingBackslash($text) if ('\\' === substr($text, -1)) { $len = strlen($text); $text = rtrim($text, '\\'); - $text .= str_repeat('<<', $len - strlen($text)); + $text .= str_repeat('\0', $len - strlen($text)); } return $text; @@ -165,8 +165,8 @@ public function format($message) $output .= $this->applyCurrentStyle(substr($message, $offset)); - if (false !== strpos($output, '<<')) { - return strtr($output, array('\\<' => '<', '<<' => '\\')); + if (false !== strpos($output, '\0')) { + return strtr($output, array('\0' => '\\', '\\<' => '<')); } return str_replace('\\<', '<', $output); diff --git a/src/Symfony/Component/Console/Tests/Formatter/OutputFormatterTest.php b/src/Symfony/Component/Console/Tests/Formatter/OutputFormatterTest.php index 866c31a443754..00e5231d80498 100644 --- a/src/Symfony/Component/Console/Tests/Formatter/OutputFormatterTest.php +++ b/src/Symfony/Component/Console/Tests/Formatter/OutputFormatterTest.php @@ -28,6 +28,9 @@ public function testLGCharEscaping() $formatter = new OutputFormatter(true); $this->assertEquals('fooformat('foo\\assertEquals('foo << bar', $formatter->format('foo << bar')); + $this->assertEquals('foo << bar \\', $formatter->format('foo << bar \\')); + $this->assertEquals("foo << \033[32mbar \\ baz\033[39m \\", $formatter->format('foo << bar \\ baz \\')); $this->assertEquals('some info', $formatter->format('\\some info\\')); $this->assertEquals('\\some info\\', OutputFormatter::escape('some info')); From 2c83766ec95519ae3011af17ab1858c9b2075aa0 Mon Sep 17 00:00:00 2001 From: Javier Eguiluz Date: Mon, 28 Aug 2017 17:06:10 +0200 Subject: [PATCH 2/3] Fixed a silly error to really use the null character --- src/Symfony/Component/Console/Formatter/OutputFormatter.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/Symfony/Component/Console/Formatter/OutputFormatter.php b/src/Symfony/Component/Console/Formatter/OutputFormatter.php index e66e34292e395..feed62de66898 100644 --- a/src/Symfony/Component/Console/Formatter/OutputFormatter.php +++ b/src/Symfony/Component/Console/Formatter/OutputFormatter.php @@ -50,7 +50,7 @@ public static function escapeTrailingBackslash($text) if ('\\' === substr($text, -1)) { $len = strlen($text); $text = rtrim($text, '\\'); - $text .= str_repeat('\0', $len - strlen($text)); + $text .= str_repeat("\0", $len - strlen($text)); } return $text; @@ -165,8 +165,8 @@ public function format($message) $output .= $this->applyCurrentStyle(substr($message, $offset)); - if (false !== strpos($output, '\0')) { - return strtr($output, array('\0' => '\\', '\\<' => '<')); + if (false !== strpos($output, "\0")) { + return strtr($output, array("\0" => '\\', '\\<' => '<')); } return str_replace('\\<', '<', $output); From 518c6db2256be4f952f8f3cae575904504c7dce8 Mon Sep 17 00:00:00 2001 From: Javier Eguiluz Date: Tue, 29 Aug 2017 17:06:43 +0200 Subject: [PATCH 3/3] Remove NULL chars from text before using the NULL char for our own purposes --- src/Symfony/Component/Console/Formatter/OutputFormatter.php | 1 + 1 file changed, 1 insertion(+) diff --git a/src/Symfony/Component/Console/Formatter/OutputFormatter.php b/src/Symfony/Component/Console/Formatter/OutputFormatter.php index feed62de66898..c8a6a780b0580 100644 --- a/src/Symfony/Component/Console/Formatter/OutputFormatter.php +++ b/src/Symfony/Component/Console/Formatter/OutputFormatter.php @@ -50,6 +50,7 @@ public static function escapeTrailingBackslash($text) if ('\\' === substr($text, -1)) { $len = strlen($text); $text = rtrim($text, '\\'); + $text = str_replace("\0", '', $text); $text .= str_repeat("\0", $len - strlen($text)); }