diff options
author | Mark A. Hershberger <mah@debian.(none)> | 2009-03-25 00:38:07 -0400 |
---|---|---|
committer | Mark A. Hershberger <mah@debian.(none)> | 2009-03-25 00:38:07 -0400 |
commit | bb01389fbd53ec1cbcb80d0681a37cca1267891a (patch) | |
tree | 4783178fca65a5d9071c8df34f2ddc3d31728673 /ext/mbstring/libmbfl | |
parent | eddbbea4325e602ddc87c545531609132d4f0e3b (diff) | |
download | php-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.c | 10 |
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) { |