For consistency with substr() and mb_substr(), iconv_substr() should return
an empty string instead of FALSE, when $offset == iconv_strlen($str).
}
- if ((size_t)offset >= total_len) {
+ if ((size_t)offset > total_len) {
return PHP_ICONV_ERR_SUCCESS;
}
err = _php_iconv_substr(&retval, ZSTR_VAL(str), ZSTR_LEN(str), offset, length, charset);
_php_iconv_show_error(err, GENERIC_SUPERSET_NAME, charset);
- if (err == PHP_ICONV_ERR_SUCCESS && ZSTR_LEN(str) > 0 && retval.s != NULL) {
+ if (err == PHP_ICONV_ERR_SUCCESS && ZSTR_LEN(str) >= 0 && retval.s != NULL) {
RETURN_NEW_STR(retval.s);
}
smart_str_free(&retval);
--- /dev/null
+--TEST--
+Bug #72320 (iconv_substr returns false for empty strings)
+--SKIPIF--
+<?php
+if (!extension_loaded('iconv')) die('skip ext/iconv required');
+?>
+--FILE--
+<?php
+var_dump(iconv_substr('', 0, 10, 'UTF-8'));
+var_dump(iconv_substr('foo', 3, 10, 'UTF-8'));
+?>
+--EXPECT--
+string(0) ""
+string(0) ""