From: Christoph M. Becker Date: Fri, 29 Jul 2016 09:28:33 +0000 (+0200) Subject: Fix #72320: iconv_substr returns false for empty strings X-Git-Tag: php-7.0.11RC1~9^2 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=a837b2f6a35ab7cdfb49b9407ac0401caa672b23;p=php Fix #72320: iconv_substr returns false for empty strings For consistency with substr() and mb_substr(), iconv_substr() should return an empty string instead of FALSE, when $offset == iconv_strlen($str). --- diff --git a/ext/iconv/iconv.c b/ext/iconv/iconv.c index d4a7f6e0af..364882305c 100644 --- a/ext/iconv/iconv.c +++ b/ext/iconv/iconv.c @@ -858,7 +858,7 @@ static php_iconv_err_t _php_iconv_substr(smart_str *pretval, } - if ((size_t)offset >= total_len) { + if ((size_t)offset > total_len) { return PHP_ICONV_ERR_SUCCESS; } @@ -2108,7 +2108,7 @@ PHP_FUNCTION(iconv_substr) 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); diff --git a/ext/iconv/tests/bug72320.phpt b/ext/iconv/tests/bug72320.phpt new file mode 100644 index 0000000000..0c83d33db0 --- /dev/null +++ b/ext/iconv/tests/bug72320.phpt @@ -0,0 +1,14 @@ +--TEST-- +Bug #72320 (iconv_substr returns false for empty strings) +--SKIPIF-- + +--FILE-- + +--EXPECT-- +string(0) "" +string(0) ""