summaryrefslogtreecommitdiff
path: root/ext/mbstring/libmbfl
diff options
context:
space:
mode:
authorMark A. Hershberger <mah@debian.(none)>2009-03-25 00:38:07 -0400
committerMark A. Hershberger <mah@debian.(none)>2009-03-25 00:38:07 -0400
commitbb01389fbd53ec1cbcb80d0681a37cca1267891a (patch)
tree4783178fca65a5d9071c8df34f2ddc3d31728673 /ext/mbstring/libmbfl
parenteddbbea4325e602ddc87c545531609132d4f0e3b (diff)
downloadphp-bb01389fbd53ec1cbcb80d0681a37cca1267891a.tar.gz
Imported Upstream version 5.2.4upstream/5.2.4
Diffstat (limited to 'ext/mbstring/libmbfl')
-rw-r--r--ext/mbstring/libmbfl/mbfl/mbfilter.c10
1 files changed, 8 insertions, 2 deletions
diff --git a/ext/mbstring/libmbfl/mbfl/mbfilter.c b/ext/mbstring/libmbfl/mbfl/mbfilter.c
index a8e3b68d3..97d2f048c 100644
--- a/ext/mbstring/libmbfl/mbfl/mbfilter.c
+++ b/ext/mbstring/libmbfl/mbfl/mbfilter.c
@@ -858,7 +858,7 @@ mbfl_strpos(
int offset,
int reverse)
{
- int n, result;
+ int n, result, negative_offset = 0;
unsigned char *p;
mbfl_convert_filter *filter;
struct collector_strpos_data pc;
@@ -904,6 +904,12 @@ mbfl_strpos(
mbfl_wchar_device_clear(&pc.needle);
return -4;
}
+
+ if (offset < 0) {
+ negative_offset = -offset-1;
+ offset = 0;
+ }
+
pc.start = offset;
pc.output = 0;
pc.needle_pos = 0;
@@ -912,7 +918,7 @@ mbfl_strpos(
/* feed data */
p = haystack->val;
- n = haystack->len;
+ n = haystack->len - negative_offset;
if (p != NULL) {
while (n > 0) {
if ((*filter->filter_function)(*p++, filter) < 0) {