summaryrefslogtreecommitdiff
path: root/ext/mbstring
diff options
context:
space:
mode:
authorChristoph M. Becker <cmb@php.net>2016-07-28 15:35:56 +0200
committerChristoph M. Becker <cmb@php.net>2016-07-28 15:50:41 +0200
commitde755310b49dbf06dd03f7bf54c4377c37c7306b (patch)
tree22a9bf85e506ad0310d5e6b7845073ba2a008e29 /ext/mbstring
parent6aaef1ed346fcc7f9dad58e47f6418d36c3cbe73 (diff)
parent805dc0ea4790b8e3dda63ae5753de14823a09bde (diff)
downloadphp-git-de755310b49dbf06dd03f7bf54c4377c37c7306b.tar.gz
Merge branch 'PHP-7.0' into PHP-7.1
# Resolved conflicts: # ext/mbstring/php_mbregex.c
Diffstat (limited to 'ext/mbstring')
-rw-r--r--ext/mbstring/php_mbregex.c2
-rw-r--r--ext/mbstring/tests/bug72694.phpt21
-rw-r--r--ext/mbstring/tests/mb_ereg_search_setpos.phpt8
3 files changed, 26 insertions, 5 deletions
diff --git a/ext/mbstring/php_mbregex.c b/ext/mbstring/php_mbregex.c
index 3b5e857289..fd103abf19 100644
--- a/ext/mbstring/php_mbregex.c
+++ b/ext/mbstring/php_mbregex.c
@@ -1446,7 +1446,7 @@ PHP_FUNCTION(mb_ereg_search_setpos)
position += Z_STRLEN(MBREX(search_str));
}
- if (position < 0 || (!Z_ISUNDEF(MBREX(search_str)) && Z_TYPE(MBREX(search_str)) == IS_STRING && (size_t)position >= Z_STRLEN(MBREX(search_str)))) {
+ if (position < 0 || (!Z_ISUNDEF(MBREX(search_str)) && Z_TYPE(MBREX(search_str)) == IS_STRING && (size_t)position > Z_STRLEN(MBREX(search_str)))) {
php_error_docref(NULL, E_WARNING, "Position is out of range");
MBREX(search_pos) = 0;
RETURN_FALSE;
diff --git a/ext/mbstring/tests/bug72694.phpt b/ext/mbstring/tests/bug72694.phpt
new file mode 100644
index 0000000000..90f56a397a
--- /dev/null
+++ b/ext/mbstring/tests/bug72694.phpt
@@ -0,0 +1,21 @@
+--TEST--
+Bug #72694 (mb_ereg_search_setpos does not accept a string's last position)
+--SKIPIF--
+<?php
+if (!extension_loaded('mbstring')) die('skip ext/mbstring required');
+?>
+--FILE--
+<?php
+mb_ereg_search_init('foo');
+
+var_dump(mb_ereg_search_setpos(3));
+var_dump(mb_ereg_search_getpos());
+
+var_dump(mb_ereg_search('\Z'));
+var_dump(mb_ereg_search_getpos());
+?>
+--EXPECT--
+bool(true)
+int(3)
+bool(true)
+int(3)
diff --git a/ext/mbstring/tests/mb_ereg_search_setpos.phpt b/ext/mbstring/tests/mb_ereg_search_setpos.phpt
index ec354309f3..0a4c18473b 100644
--- a/ext/mbstring/tests/mb_ereg_search_setpos.phpt
+++ b/ext/mbstring/tests/mb_ereg_search_setpos.phpt
@@ -14,7 +14,7 @@ var_dump(mb_ereg_search_setpos(-1)); // Error
mb_ereg_search_init($test_str);
-$positions = array( 5, 19, 20, 25, 0, -5, -20, -30);
+$positions = array( 5, 20, 21, 25, 0, -5, -20, -30);
foreach($positions as $pos) {
echo("\n* Position: $pos :\n");
var_dump(mb_ereg_search_setpos($pos));
@@ -32,11 +32,11 @@ bool(false)
bool(true)
int(5)
-* Position: 19 :
+* Position: 20 :
bool(true)
-int(19)
+int(20)
-* Position: 20 :
+* Position: 21 :
Warning: mb_ereg_search_setpos(): Position is out of range in %s on line %d
bool(false)