From 3b5634bf8bc0b17dcb2e97d252511154cd4e0706 Mon Sep 17 00:00:00 2001 From: Alexander Makarov Date: Sat, 2 Jul 2016 21:06:39 +0300 Subject: [PATCH] Fixes #11863: Fixed usage of `mb_substr` with PHP < 5.4.8 where length of NULL was treated the same as 0 --- framework/CHANGELOG.md | 1 + framework/helpers/BaseStringHelper.php | 2 +- framework/i18n/MessageFormatter.php | 4 ++-- framework/web/UploadedFile.php | 3 ++- 4 files changed, 6 insertions(+), 4 deletions(-) diff --git a/framework/CHANGELOG.md b/framework/CHANGELOG.md index 4e2209dad6..25a78eb062 100644 --- a/framework/CHANGELOG.md +++ b/framework/CHANGELOG.md @@ -46,6 +46,7 @@ Yii Framework 2 Change Log - Bug #11847: Fixed `yii\widgets\Pjax` to properly respond with partials when custom selector is used for container (pigochu, samdark) - Bug #10681: Fixed active form `beforeValidate` wasn't triggered in some cases (lynicidn) - Enh #11857: `yii\filters\AccessRule::$verbs` could not be configured with any case of request method names (DrDeath72, samdark) +- Bug #11863: Fixed usage of `mb_substr` with PHP < 5.4.8 where length of NULL was treated the same as 0 (samdark) 2.0.8 April 28, 2016 -------------------- diff --git a/framework/helpers/BaseStringHelper.php b/framework/helpers/BaseStringHelper.php index 864210e378..d5aaf37334 100644 --- a/framework/helpers/BaseStringHelper.php +++ b/framework/helpers/BaseStringHelper.php @@ -232,7 +232,7 @@ class BaseStringHelper } return substr_compare($string, $with, -$bytes, $bytes) === 0; } else { - return mb_strtolower(mb_substr($string, -$bytes, null, '8bit'), Yii::$app->charset) === mb_strtolower($with, Yii::$app->charset); + return mb_strtolower(mb_substr($string, -$bytes, mb_strlen($string, '8bit'), '8bit'), Yii::$app->charset) === mb_strtolower($with, Yii::$app->charset); } } diff --git a/framework/i18n/MessageFormatter.php b/framework/i18n/MessageFormatter.php index 2d68a391d3..0f9255c7f9 100644 --- a/framework/i18n/MessageFormatter.php +++ b/framework/i18n/MessageFormatter.php @@ -401,10 +401,10 @@ class MessageFormatter extends Component if ($i == 1 && strncmp($selector, 'offset:', 7) === 0) { $offset = (int) trim(mb_substr($selector, 7, ($pos = mb_strpos(str_replace(["\n", "\r", "\t"], ' ', $selector), ' ', 7, $charset)) - 7, $charset)); - $selector = trim(mb_substr($selector, $pos + 1, null, $charset)); + $selector = trim(mb_substr($selector, $pos + 1, mb_strlen($selector, $charset), $charset)); } if ($message === false && $selector === 'other' || - $selector[0] === '=' && (int) mb_substr($selector, 1, null, $charset) === $arg || + $selector[0] === '=' && (int) mb_substr($selector, 1, mb_strlen($selector, $charset), $charset) === $arg || $selector === 'one' && $arg - $offset == 1 ) { $message = implode(',', str_replace('#', $arg - $offset, $plural[$i])); diff --git a/framework/web/UploadedFile.php b/framework/web/UploadedFile.php index dc3035a8bb..cca79518e6 100644 --- a/framework/web/UploadedFile.php +++ b/framework/web/UploadedFile.php @@ -172,7 +172,8 @@ class UploadedFile extends Object public function getBaseName() { // https://github.com/yiisoft/yii2/issues/11012 - return mb_substr(pathinfo('_' . $this->name, PATHINFO_FILENAME), 1, null, '8bit'); + $pathInfo = pathinfo('_' . $this->name, PATHINFO_FILENAME); + return mb_substr($pathInfo, 1, mb_strlen($pathInfo, '8bit'), '8bit'); } /**