From ae1684c4143a2937798172762d60c6fdd71c182c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Beno=C3=AEt=20Burnichon?= Date: Thu, 25 Jan 2018 14:23:25 +0100 Subject: [PATCH 1/4] Allow binary values in parameters. --- .../Component/DependencyInjection/Dumper/PhpDumper.php | 7 ++++++- .../Component/DependencyInjection/Dumper/XmlDumper.php | 4 ++++ .../Component/DependencyInjection/Loader/XmlFileLoader.php | 6 ++++++ .../Loader/schema/dic/services/services-1.0.xsd | 1 + .../Tests/Fixtures/containers/container8.php | 2 ++ .../DependencyInjection/Tests/Fixtures/php/services8.php | 2 ++ .../DependencyInjection/Tests/Fixtures/xml/services8.xml | 2 ++ .../DependencyInjection/Tests/Fixtures/yaml/services8.yml | 2 ++ 8 files changed, 25 insertions(+), 1 deletion(-) diff --git a/src/Symfony/Component/DependencyInjection/Dumper/PhpDumper.php b/src/Symfony/Component/DependencyInjection/Dumper/PhpDumper.php index 5ece0fa4a52e4..930222e35adc2 100644 --- a/src/Symfony/Component/DependencyInjection/Dumper/PhpDumper.php +++ b/src/Symfony/Component/DependencyInjection/Dumper/PhpDumper.php @@ -1811,7 +1811,12 @@ private function export($value) private function doExport($value, $resolveEnv = false) { - if (is_string($value) && false !== strpos($value, "\n")) { + if (is_string($value) && \in_array(preg_match('/[^\s\P{Cc}]/u', $value), array(false, 1), true)) { + $toHex = function (&$values, $char) { + return $values.sprintf('\\x%02x', ord($char)); + }; + $export = '"'.array_reduce(str_split($value), $toHex, '').'"'; + } elseif (is_string($value) && false !== strpos($value, "\n")) { $cleanParts = explode("\n", $value); $cleanParts = array_map(function ($part) { return var_export($part, true); }, $cleanParts); $export = implode('."\n".', $cleanParts); diff --git a/src/Symfony/Component/DependencyInjection/Dumper/XmlDumper.php b/src/Symfony/Component/DependencyInjection/Dumper/XmlDumper.php index defbc7ae89da4..06916e2c57364 100644 --- a/src/Symfony/Component/DependencyInjection/Dumper/XmlDumper.php +++ b/src/Symfony/Component/DependencyInjection/Dumper/XmlDumper.php @@ -298,6 +298,10 @@ private function convertParameters(array $parameters, $type, \DOMElement $parent $element->setAttribute('type', 'expression'); $text = $this->document->createTextNode(self::phpToXml((string) $value)); $element->appendChild($text); + } elseif (is_string($value) && \in_array(preg_match('/[^\s\P{Cc}]/u', $value), array(false, 1), true)) { + $element->setAttribute('type', 'binary'); + $text = $this->document->createTextNode(self::phpToXml(base64_encode($value))); + $element->appendChild($text); } else { if (in_array($value, array('null', 'true', 'false'), true)) { $element->setAttribute('type', 'string'); diff --git a/src/Symfony/Component/DependencyInjection/Loader/XmlFileLoader.php b/src/Symfony/Component/DependencyInjection/Loader/XmlFileLoader.php index 71ddd2227b605..7c89984cefb70 100644 --- a/src/Symfony/Component/DependencyInjection/Loader/XmlFileLoader.php +++ b/src/Symfony/Component/DependencyInjection/Loader/XmlFileLoader.php @@ -511,6 +511,12 @@ private function getArgumentsAsPhp(\DOMElement $node, $name, $file, $lowercase = } $arguments[$key] = new TaggedIteratorArgument($arg->getAttribute('tag')); break; + case 'binary': + if (false === $value = base64_decode($arg->nodeValue)) { + throw new InvalidArgumentException(sprintf('Tag "<%s>" with type="binary" is not a valid base64 encoded string.', $name)); + } + $arguments[$key] = $value; + break; case 'string': $arguments[$key] = $arg->nodeValue; break; diff --git a/src/Symfony/Component/DependencyInjection/Loader/schema/dic/services/services-1.0.xsd b/src/Symfony/Component/DependencyInjection/Loader/schema/dic/services/services-1.0.xsd index 99ac00567d915..60a01bd666aed 100644 --- a/src/Symfony/Component/DependencyInjection/Loader/schema/dic/services/services-1.0.xsd +++ b/src/Symfony/Component/DependencyInjection/Loader/schema/dic/services/services-1.0.xsd @@ -246,6 +246,7 @@ + diff --git a/src/Symfony/Component/DependencyInjection/Tests/Fixtures/containers/container8.php b/src/Symfony/Component/DependencyInjection/Tests/Fixtures/containers/container8.php index 1a4e5ab5c8d8d..31e6baab32405 100644 --- a/src/Symfony/Component/DependencyInjection/Tests/Fixtures/containers/container8.php +++ b/src/Symfony/Component/DependencyInjection/Tests/Fixtures/containers/container8.php @@ -9,6 +9,8 @@ 'bar' => 'foo is %%foo bar', 'escape' => '@escapeme', 'values' => array(true, false, null, 0, 1000.3, 'true', 'false', 'null'), + 'binary' => "\xf0\xf0\xf0\xf0", + 'binary-control-char' => "This is a Bell char \x07", ))); return $container; diff --git a/src/Symfony/Component/DependencyInjection/Tests/Fixtures/php/services8.php b/src/Symfony/Component/DependencyInjection/Tests/Fixtures/php/services8.php index dc7da1c274e5c..f4c4b52c0d63b 100644 --- a/src/Symfony/Component/DependencyInjection/Tests/Fixtures/php/services8.php +++ b/src/Symfony/Component/DependencyInjection/Tests/Fixtures/php/services8.php @@ -135,6 +135,8 @@ protected function getDefaultParameters() 6 => 'false', 7 => 'null', ), + 'binary' => "\xf0\xf0\xf0\xf0", + 'binary-control-char' => "\x54\x68\x69\x73\x20\x69\x73\x20\x61\x20\x42\x65\x6c\x6c\x20\x63\x68\x61\x72\x20\x07", ); } } diff --git a/src/Symfony/Component/DependencyInjection/Tests/Fixtures/xml/services8.xml b/src/Symfony/Component/DependencyInjection/Tests/Fixtures/xml/services8.xml index bc1186bd93ccf..5bd9d1127b978 100644 --- a/src/Symfony/Component/DependencyInjection/Tests/Fixtures/xml/services8.xml +++ b/src/Symfony/Component/DependencyInjection/Tests/Fixtures/xml/services8.xml @@ -18,6 +18,8 @@ false null + 8PDw8A== + VGhpcyBpcyBhIEJlbGwgY2hhciAH diff --git a/src/Symfony/Component/DependencyInjection/Tests/Fixtures/yaml/services8.yml b/src/Symfony/Component/DependencyInjection/Tests/Fixtures/yaml/services8.yml index 4e37bc9315c9b..a17a71cc8ecf5 100644 --- a/src/Symfony/Component/DependencyInjection/Tests/Fixtures/yaml/services8.yml +++ b/src/Symfony/Component/DependencyInjection/Tests/Fixtures/yaml/services8.yml @@ -4,6 +4,8 @@ parameters: bar: 'foo is %%foo bar' escape: '@@escapeme' values: [true, false, null, 0, 1000.3, 'true', 'false', 'null'] + binary: !!binary 8PDw8A== + binary-control-char: !!binary VGhpcyBpcyBhIEJlbGwgY2hhciAH services: service_container: From 60436ac7972e030159aa79b50572913d9d3182d0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Beno=C3=AEt=20Burnichon?= Date: Tue, 20 Mar 2018 18:16:43 +0100 Subject: [PATCH 2/4] Change regexp to Invalid Byte selection --- src/Symfony/Component/DependencyInjection/Dumper/PhpDumper.php | 2 +- src/Symfony/Component/DependencyInjection/Dumper/XmlDumper.php | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Symfony/Component/DependencyInjection/Dumper/PhpDumper.php b/src/Symfony/Component/DependencyInjection/Dumper/PhpDumper.php index 930222e35adc2..d352df8ba5f7d 100644 --- a/src/Symfony/Component/DependencyInjection/Dumper/PhpDumper.php +++ b/src/Symfony/Component/DependencyInjection/Dumper/PhpDumper.php @@ -1811,7 +1811,7 @@ private function export($value) private function doExport($value, $resolveEnv = false) { - if (is_string($value) && \in_array(preg_match('/[^\s\P{Cc}]/u', $value), array(false, 1), true)) { + if (is_string($value) && \in_array(preg_match('/[\x00-\x08\x0B\x0E-\x1A\x1C-\x1F\x7F]/u', $value), array(false, 1), true)) { $toHex = function (&$values, $char) { return $values.sprintf('\\x%02x', ord($char)); }; diff --git a/src/Symfony/Component/DependencyInjection/Dumper/XmlDumper.php b/src/Symfony/Component/DependencyInjection/Dumper/XmlDumper.php index 06916e2c57364..10cc0cde8fb3c 100644 --- a/src/Symfony/Component/DependencyInjection/Dumper/XmlDumper.php +++ b/src/Symfony/Component/DependencyInjection/Dumper/XmlDumper.php @@ -298,7 +298,7 @@ private function convertParameters(array $parameters, $type, \DOMElement $parent $element->setAttribute('type', 'expression'); $text = $this->document->createTextNode(self::phpToXml((string) $value)); $element->appendChild($text); - } elseif (is_string($value) && \in_array(preg_match('/[^\s\P{Cc}]/u', $value), array(false, 1), true)) { + } elseif (is_string($value) && \in_array(preg_match('/[\x00-\x08\x0B\x0E-\x1A\x1C-\x1F\x7F]/u', $value), array(false, 1), true)) { $element->setAttribute('type', 'binary'); $text = $this->document->createTextNode(self::phpToXml(base64_encode($value))); $element->appendChild($text); From 801e9b37cbcaf736c1ed228ae830141d0986fca1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Beno=C3=AEt=20Burnichon?= Date: Thu, 22 Mar 2018 18:17:10 +0100 Subject: [PATCH 3/4] Reverse regexp to avoid in_array() --- .../Component/DependencyInjection/Dumper/PhpDumper.php | 4 ++-- .../Component/DependencyInjection/Dumper/XmlDumper.php | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/Symfony/Component/DependencyInjection/Dumper/PhpDumper.php b/src/Symfony/Component/DependencyInjection/Dumper/PhpDumper.php index d352df8ba5f7d..313708bd1cbcf 100644 --- a/src/Symfony/Component/DependencyInjection/Dumper/PhpDumper.php +++ b/src/Symfony/Component/DependencyInjection/Dumper/PhpDumper.php @@ -1811,12 +1811,12 @@ private function export($value) private function doExport($value, $resolveEnv = false) { - if (is_string($value) && \in_array(preg_match('/[\x00-\x08\x0B\x0E-\x1A\x1C-\x1F\x7F]/u', $value), array(false, 1), true)) { + if (\is_string($value) && !preg_match('/^[^\x00-\x08\x0B\x0E-\x1A\x1C-\x1F\x7F]*+$/u', $value)) { $toHex = function (&$values, $char) { return $values.sprintf('\\x%02x', ord($char)); }; $export = '"'.array_reduce(str_split($value), $toHex, '').'"'; - } elseif (is_string($value) && false !== strpos($value, "\n")) { + } elseif (\is_string($value) && false !== strpos($value, "\n")) { $cleanParts = explode("\n", $value); $cleanParts = array_map(function ($part) { return var_export($part, true); }, $cleanParts); $export = implode('."\n".', $cleanParts); diff --git a/src/Symfony/Component/DependencyInjection/Dumper/XmlDumper.php b/src/Symfony/Component/DependencyInjection/Dumper/XmlDumper.php index 10cc0cde8fb3c..664e58aa87010 100644 --- a/src/Symfony/Component/DependencyInjection/Dumper/XmlDumper.php +++ b/src/Symfony/Component/DependencyInjection/Dumper/XmlDumper.php @@ -298,7 +298,7 @@ private function convertParameters(array $parameters, $type, \DOMElement $parent $element->setAttribute('type', 'expression'); $text = $this->document->createTextNode(self::phpToXml((string) $value)); $element->appendChild($text); - } elseif (is_string($value) && \in_array(preg_match('/[\x00-\x08\x0B\x0E-\x1A\x1C-\x1F\x7F]/u', $value), array(false, 1), true)) { + } elseif (\is_string($value) && !preg_match('/^[^\x00-\x08\x0B\x0E-\x1A\x1C-\x1F\x7F]*+$/u', $value)) { $element->setAttribute('type', 'binary'); $text = $this->document->createTextNode(self::phpToXml(base64_encode($value))); $element->appendChild($text); From 0e466987a1940703d307d65df354ca3e57dfcc89 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Beno=C3=AEt=20Burnichon?= Date: Thu, 22 Mar 2018 18:39:08 +0100 Subject: [PATCH 4/4] Revert PhpDumper.php changes --- .../Component/DependencyInjection/Dumper/PhpDumper.php | 7 +------ .../DependencyInjection/Tests/Fixtures/php/services8.php | 4 ++-- 2 files changed, 3 insertions(+), 8 deletions(-) diff --git a/src/Symfony/Component/DependencyInjection/Dumper/PhpDumper.php b/src/Symfony/Component/DependencyInjection/Dumper/PhpDumper.php index 313708bd1cbcf..5ece0fa4a52e4 100644 --- a/src/Symfony/Component/DependencyInjection/Dumper/PhpDumper.php +++ b/src/Symfony/Component/DependencyInjection/Dumper/PhpDumper.php @@ -1811,12 +1811,7 @@ private function export($value) private function doExport($value, $resolveEnv = false) { - if (\is_string($value) && !preg_match('/^[^\x00-\x08\x0B\x0E-\x1A\x1C-\x1F\x7F]*+$/u', $value)) { - $toHex = function (&$values, $char) { - return $values.sprintf('\\x%02x', ord($char)); - }; - $export = '"'.array_reduce(str_split($value), $toHex, '').'"'; - } elseif (\is_string($value) && false !== strpos($value, "\n")) { + if (is_string($value) && false !== strpos($value, "\n")) { $cleanParts = explode("\n", $value); $cleanParts = array_map(function ($part) { return var_export($part, true); }, $cleanParts); $export = implode('."\n".', $cleanParts); diff --git a/src/Symfony/Component/DependencyInjection/Tests/Fixtures/php/services8.php b/src/Symfony/Component/DependencyInjection/Tests/Fixtures/php/services8.php index f4c4b52c0d63b..eeeb37a07284e 100644 --- a/src/Symfony/Component/DependencyInjection/Tests/Fixtures/php/services8.php +++ b/src/Symfony/Component/DependencyInjection/Tests/Fixtures/php/services8.php @@ -135,8 +135,8 @@ protected function getDefaultParameters() 6 => 'false', 7 => 'null', ), - 'binary' => "\xf0\xf0\xf0\xf0", - 'binary-control-char' => "\x54\x68\x69\x73\x20\x69\x73\x20\x61\x20\x42\x65\x6c\x6c\x20\x63\x68\x61\x72\x20\x07", + 'binary' => 'ננננ', + 'binary-control-char' => 'This is a Bell char ', ); } } pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy