summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristoph M. Becker <cmbecker69@gmx.de>2016-08-30 01:18:23 +0200
committerChristoph M. Becker <cmbecker69@gmx.de>2016-08-30 01:18:59 +0200
commitec8bbba9c66072cccbc9074ea3de90499c525a13 (patch)
treede7c621a1457c892b5e04da07f50379bd70a229a
parent2bfe926eb1ee57afb11a7872f0fcb5c4cc1e3ebc (diff)
parent4b45c0a9a7d48a69edba9e00270c49bbe17af4d1 (diff)
downloadphp-git-ec8bbba9c66072cccbc9074ea3de90499c525a13.tar.gz
Merge branch 'PHP-7.0' into PHP-7.1
-rw-r--r--NEWS3
-rw-r--r--ext/iconv/iconv.c4
-rw-r--r--ext/iconv/tests/bug72320.phpt14
3 files changed, 19 insertions, 2 deletions
diff --git a/NEWS b/NEWS
index f62cd734ff..e68a2e8244 100644
--- a/NEWS
+++ b/NEWS
@@ -24,6 +24,9 @@ PHP NEWS
images). (cmb)
. Fixed bug #68716 (possible resource leaks in _php_image_convert()). (cmb)
+- iconv:
+ . Fixed bug #72320 (iconv_substr returns false for empty strings). (cmb)
+
- Intl:
. Fixed bug #65732 (grapheme_*() is not Unicode compliant on CR LF
sequence). (cmb)
diff --git a/ext/iconv/iconv.c b/ext/iconv/iconv.c
index 0d44936ea6..99a24d78bc 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--
+<?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) ""