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