From 27f5f81eb3dd3ba2cf67eac359c3d09a04077c40 Mon Sep 17 00:00:00 2001 From: Nicolas Grekas Date: Thu, 14 Apr 2016 09:48:17 +0200 Subject: [PATCH 1/3] Replace iconv_*() uses by mb_*(), add mbstring polyfill when required --- src/Symfony/Bridge/Doctrine/Logger/DbalLogger.php | 4 ++-- src/Symfony/Bridge/Doctrine/composer.json | 3 ++- .../Component/Validator/Constraints/LengthValidator.php | 7 ++----- src/Symfony/Component/Validator/composer.json | 1 + src/Symfony/Component/VarDumper/Cloner/VarCloner.php | 4 ++-- src/Symfony/Component/VarDumper/Dumper/CliDumper.php | 6 +++--- 6 files changed, 12 insertions(+), 13 deletions(-) diff --git a/src/Symfony/Bridge/Doctrine/Logger/DbalLogger.php b/src/Symfony/Bridge/Doctrine/Logger/DbalLogger.php index 18fb341e5b..88b48e1ddb 100644 --- a/src/Symfony/Bridge/Doctrine/Logger/DbalLogger.php +++ b/src/Symfony/Bridge/Doctrine/Logger/DbalLogger.php @@ -95,8 +95,8 @@ class DbalLogger implements SQLLogger } // detect if the too long string must be shorten - if (self::MAX_STRING_LENGTH < iconv_strlen($params[$index], 'UTF-8')) { - $params[$index] = iconv_substr($params[$index], 0, self::MAX_STRING_LENGTH - 6, 'UTF-8').' [...]'; + if (self::MAX_STRING_LENGTH < mb_strlen($params[$index], 'UTF-8')) { + $params[$index] = mb_substr($params[$index], 0, self::MAX_STRING_LENGTH - 6, 'UTF-8').' [...]'; continue; } } diff --git a/src/Symfony/Bridge/Doctrine/composer.json b/src/Symfony/Bridge/Doctrine/composer.json index f07527f5cb..593030f7e4 100644 --- a/src/Symfony/Bridge/Doctrine/composer.json +++ b/src/Symfony/Bridge/Doctrine/composer.json @@ -17,7 +17,8 @@ ], "require": { "php": ">=5.3.9", - "doctrine/common": "~2.4" + "doctrine/common": "~2.4", + "symfony/polyfill-mbstring": "~1.0" }, "require-dev": { "symfony/stopwatch": "~2.2|~3.0.0", diff --git a/src/Symfony/Component/Validator/Constraints/LengthValidator.php b/src/Symfony/Component/Validator/Constraints/LengthValidator.php index 9ecfb8c0c9..1518ecf0c6 100644 --- a/src/Symfony/Component/Validator/Constraints/LengthValidator.php +++ b/src/Symfony/Component/Validator/Constraints/LengthValidator.php @@ -40,13 +40,10 @@ class LengthValidator extends ConstraintValidator $stringValue = (string) $value; - if ('UTF8' === $charset = strtoupper($constraint->charset)) { - $charset = 'UTF-8'; // iconv on Windows requires "UTF-8" instead of "UTF8" + if (!$invalidCharset = !@mb_check_encoding($stringValue, $constraint->charset)) { + $length = mb_strlen($stringValue, $constraint->charset); } - $length = @iconv_strlen($stringValue, $charset); - $invalidCharset = false === $length; - if ($invalidCharset) { if ($this->context instanceof ExecutionContextInterface) { $this->context->buildViolation($constraint->charsetMessage) diff --git a/src/Symfony/Component/Validator/composer.json b/src/Symfony/Component/Validator/composer.json index f7515d1b02..496d9e9dfc 100644 --- a/src/Symfony/Component/Validator/composer.json +++ b/src/Symfony/Component/Validator/composer.json @@ -17,6 +17,7 @@ ], "require": { "php": ">=5.3.9", + "symfony/polyfill-mbstring": "~1.0", "symfony/translation": "~2.4|~3.0.0" }, "require-dev": { diff --git a/src/Symfony/Component/VarDumper/Cloner/VarCloner.php b/src/Symfony/Component/VarDumper/Cloner/VarCloner.php index 139f59eae6..b5fc1cb668 100644 --- a/src/Symfony/Component/VarDumper/Cloner/VarCloner.php +++ b/src/Symfony/Component/VarDumper/Cloner/VarCloner.php @@ -102,12 +102,12 @@ class VarCloner extends AbstractCloner } else { $stub->value = $v; } - } elseif (0 <= $maxString && isset($v[1 + ($maxString >> 2)]) && 0 < $cut = iconv_strlen($v, 'UTF-8') - $maxString) { + } elseif (0 <= $maxString && isset($v[1 + ($maxString >> 2)]) && 0 < $cut = mb_strlen($v, 'UTF-8') - $maxString) { $stub = new Stub(); $stub->type = Stub::TYPE_STRING; $stub->class = Stub::STRING_UTF8; $stub->cut = $cut; - $stub->value = iconv_substr($v, 0, $maxString, 'UTF-8'); + $stub->value = mb_substr($v, 0, $maxString, 'UTF-8'); } break; diff --git a/src/Symfony/Component/VarDumper/Dumper/CliDumper.php b/src/Symfony/Component/VarDumper/Dumper/CliDumper.php index 3c4253338a..bbbfa8a668 100644 --- a/src/Symfony/Component/VarDumper/Dumper/CliDumper.php +++ b/src/Symfony/Component/VarDumper/Dumper/CliDumper.php @@ -169,7 +169,7 @@ class CliDumper extends AbstractDumper $this->dumpLine($cursor->depth, true); } else { $attr = array( - 'length' => 0 <= $cut ? iconv_strlen($str, 'UTF-8') + $cut : 0, + 'length' => 0 <= $cut ? mb_strlen($str, 'UTF-8') + $cut : 0, 'binary' => $bin, ); $str = explode("\n", $str); @@ -195,8 +195,8 @@ class CliDumper extends AbstractDumper if ($i < $m) { $str .= "\n"; } - if (0 < $this->maxStringWidth && $this->maxStringWidth < $len = iconv_strlen($str, 'UTF-8')) { - $str = iconv_substr($str, 0, $this->maxStringWidth, 'UTF-8'); + if (0 < $this->maxStringWidth && $this->maxStringWidth < $len = mb_strlen($str, 'UTF-8')) { + $str = mb_substr($str, 0, $this->maxStringWidth, 'UTF-8'); $lineCut = $len - $this->maxStringWidth; } if ($m && 0 < $cursor->depth) { From 9093bd5d83d3d611e009340693d4976bf8b7ba61 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?K=C3=A9vin=20Dunglas?= Date: Mon, 18 Apr 2016 22:49:43 +0200 Subject: [PATCH 2/3] [PropertyInfo] Remove useless return statement --- .../Component/PropertyInfo/Extractor/ReflectionExtractor.php | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/Symfony/Component/PropertyInfo/Extractor/ReflectionExtractor.php b/src/Symfony/Component/PropertyInfo/Extractor/ReflectionExtractor.php index 8226655f7a..9b7262d237 100644 --- a/src/Symfony/Component/PropertyInfo/Extractor/ReflectionExtractor.php +++ b/src/Symfony/Component/PropertyInfo/Extractor/ReflectionExtractor.php @@ -294,8 +294,6 @@ class ReflectionExtractor implements PropertyListExtractorInterface, PropertyTyp // Return null if the property doesn't exist } } - - return; } /** From ed2e2360bcd085100a3b2a80aa0fa9d3dd4c4fba Mon Sep 17 00:00:00 2001 From: Nicolas Grekas Date: Wed, 20 Apr 2016 08:44:03 +0200 Subject: [PATCH 3/3] [DI] Fix internal caching in AutowirePass --- .../DependencyInjection/Compiler/AutowirePass.php | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/Symfony/Component/DependencyInjection/Compiler/AutowirePass.php b/src/Symfony/Component/DependencyInjection/Compiler/AutowirePass.php index b46635dca6..5ac32ba175 100644 --- a/src/Symfony/Component/DependencyInjection/Compiler/AutowirePass.php +++ b/src/Symfony/Component/DependencyInjection/Compiler/AutowirePass.php @@ -228,7 +228,7 @@ class AutowirePass implements CompilerPassInterface * @param string $id * @param Definition $definition * - * @return \ReflectionClass|null + * @return \ReflectionClass|false */ private function getReflectionClass($id, Definition $definition) { @@ -238,15 +238,17 @@ class AutowirePass implements CompilerPassInterface // Cannot use reflection if the class isn't set if (!$class = $definition->getClass()) { - return; + return false; } $class = $this->container->getParameterBag()->resolveValue($class); try { - return $this->reflectionClasses[$id] = new \ReflectionClass($class); + $reflector = new \ReflectionClass($class); } catch (\ReflectionException $reflectionException) { - // return null + $reflector = false; } + + return $this->reflectionClasses[$id] = $reflector; } }