From 4ba6811296f8bf7dfdc806391b51c77ca2b04fff Mon Sep 17 00:00:00 2001 From: Georg Ringer <georg.ringer@gmail.com> Date: Wed, 8 Feb 2017 19:59:28 +0100 Subject: [PATCH] [BUGFIX] Use mb_strlen in StringLengthValidator MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit By using mb_strlen for checking the length, the check counts multibyte values now correctly. Resolves: #79684 Releases: master Change-Id: Idcc9fc6e77d0cd42bc43986acb956af67da2453d Reviewed-on: https://review.typo3.org/51593 Reviewed-by: Stephan Großberndt <stephan@grossberndt.de> Tested-by: TYPO3com <no-reply@typo3.com> Reviewed-by: Philipp Gampe <philipp.gampe@typo3.org> Tested-by: Philipp Gampe <philipp.gampe@typo3.org> Reviewed-by: Mona Muzaffar <mona.muzaffar@gmx.de> Tested-by: Mona Muzaffar <mona.muzaffar@gmx.de> Reviewed-by: Mathias Brodala <mbrodala@pagemachine.de> Reviewed-by: Markus Klein <markus.klein@typo3.org> Tested-by: Markus Klein <markus.klein@typo3.org> --- .../Validation/Validator/StringLengthValidator.php | 3 +-- .../Validation/Validator/StringLengthValidatorTest.php | 9 ++++++--- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/typo3/sysext/extbase/Classes/Validation/Validator/StringLengthValidator.php b/typo3/sysext/extbase/Classes/Validation/Validator/StringLengthValidator.php index c249773a633e..68fd428f9809 100644 --- a/typo3/sysext/extbase/Classes/Validation/Validator/StringLengthValidator.php +++ b/typo3/sysext/extbase/Classes/Validation/Validator/StringLengthValidator.php @@ -55,8 +55,7 @@ class StringLengthValidator extends AbstractValidator return; } - // @todo Use \TYPO3\CMS\Core\Charset\CharsetConverter::strlen() instead; How do we get the charset? - $stringLength = strlen($value); + $stringLength = mb_strlen($value, 'utf-8'); $isValid = true; if ($stringLength < $this->options['minimum']) { $isValid = false; diff --git a/typo3/sysext/extbase/Tests/Unit/Validation/Validator/StringLengthValidatorTest.php b/typo3/sysext/extbase/Tests/Unit/Validation/Validator/StringLengthValidatorTest.php index fcb7368ba5b9..30cb907f86a2 100644 --- a/typo3/sysext/extbase/Tests/Unit/Validation/Validator/StringLengthValidatorTest.php +++ b/typo3/sysext/extbase/Tests/Unit/Validation/Validator/StringLengthValidatorTest.php @@ -268,8 +268,11 @@ class StringLengthValidatorTest extends \TYPO3\Components\TestingFramework\Core\ */ public function validateRegardsMultibyteStringsCorrectly() { - // $this->validatorOptions(array('maximum' => 8)); -// $this->assertFalse($this->validator->validate('überlang')->hasErrors()); - $this->markTestSkipped('Validator needs to be adjusted regarding multibyte char lengths.'); + $options = ['minimum' => 0, 'maximum' => 8]; + $validator = $this->getMockBuilder($this->validatorClassName) + ->setMethods(['dummy']) + ->setConstructorArgs([$options]) + ->getMock(); + $this->assertFalse($validator->validate('überlang')->hasErrors()); } } -- GitLab