Skip to content

Commit 9b8eded

Browse files
authored
Fixed "passing null to parameter" in Mage_Core_Helper_String (OpenMage#3341)
1 parent bda0b6f commit 9b8eded

File tree

1 file changed

+23
-7
lines changed

1 file changed

+23
-7
lines changed

app/code/core/Mage/Core/Helper/String.php

Lines changed: 23 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ class Mage_Core_Helper_String extends Mage_Core_Helper_Abstract
4444
public function truncate($string, $length = 80, $etc = '...', &$remainder = '', $breakWords = true)
4545
{
4646
$remainder = '';
47-
if ($length == 0) {
47+
if (is_null($string) || $length == 0) {
4848
return '';
4949
}
5050

@@ -75,7 +75,7 @@ public function truncate($string, $length = 80, $etc = '...', &$remainder = '',
7575
*/
7676
public function strlen($string)
7777
{
78-
return iconv_strlen($string, self::ICONV_CHARSET);
78+
return is_null($string) ? 0 : iconv_strlen($string, self::ICONV_CHARSET);
7979
}
8080

8181
/**
@@ -88,6 +88,9 @@ public function strlen($string)
8888
*/
8989
public function substr($string, $offset, $length = null)
9090
{
91+
if (is_null($string)) {
92+
return '';
93+
}
9194
$string = $this->cleanString($string);
9295
if (is_null($length)) {
9396
$length = $this->strlen($string) - $offset;
@@ -246,6 +249,9 @@ public function str_split($str, $length = 1, $keepWords = false, $trim = false,
246249
*/
247250
public function splitWords($str, $uniqueOnly = false, $maxWordLength = 0, $wordSeparatorRegexp = '\s')
248251
{
252+
if (is_null($str)) {
253+
return [];
254+
}
249255
$result = [];
250256
$split = preg_split('#' . $wordSeparatorRegexp . '#siu', $str, -1, PREG_SPLIT_NO_EMPTY);
251257
foreach ($split as $word) {
@@ -269,8 +275,12 @@ public function splitWords($str, $uniqueOnly = false, $maxWordLength = 0, $wordS
269275
*/
270276
public function cleanString($string)
271277
{
272-
return '"libiconv"' == ICONV_IMPL ?
273-
iconv(self::ICONV_CHARSET, self::ICONV_CHARSET . '//IGNORE', $string) : $string;
278+
if (is_null($string)) {
279+
return '';
280+
}
281+
return '"libiconv"' == ICONV_IMPL
282+
? iconv(self::ICONV_CHARSET, self::ICONV_CHARSET . '//IGNORE', $string)
283+
: $string;
274284
}
275285

276286
/**
@@ -279,11 +289,11 @@ public function cleanString($string)
279289
* @param string $haystack
280290
* @param string $needle
281291
* @param int $offset
282-
* @return int
292+
* @return int|false
283293
*/
284-
public function strpos($haystack, $needle, $offset = null)
294+
public function strpos($haystack, $needle, $offset = 0)
285295
{
286-
return iconv_strpos($haystack, $needle, $offset, self::ICONV_CHARSET);
296+
return iconv_strpos((string) $haystack, (string) $needle, $offset, self::ICONV_CHARSET);
287297
}
288298

289299
/**
@@ -315,6 +325,9 @@ public function ksortMultibyte(array &$sort)
315325
*/
316326
public function parseQueryStr($str)
317327
{
328+
if (is_null($str)) {
329+
return [];
330+
}
318331
$argSeparator = '&';
319332
$result = [];
320333
$partsQueryStr = explode($argSeparator, $str);
@@ -510,6 +523,9 @@ public function uniOrd($c)
510523
*/
511524
public function unserialize($str)
512525
{
526+
if (is_null($str)) {
527+
return null;
528+
}
513529
$reader = new Unserialize_Reader_ArrValue('data');
514530
$prevChar = null;
515531
for ($i = 0; $i < strlen($str); $i++) {

0 commit comments

Comments
 (0)