From: Moriyoshi Koizumi Date: Thu, 27 Apr 2006 00:50:54 +0000 (+0000) Subject: - MFH: fix bug #37176 (iconv_strpos() fails to find a string) X-Git-Tag: RELEASE_1_0_3~13 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=522ce80071e992132f549bd5dd41de43f50ccc55;p=php - MFH: fix bug #37176 (iconv_strpos() fails to find a string) --- diff --git a/ext/iconv/iconv.c b/ext/iconv/iconv.c index 4c78ac022f..6b7c483759 100644 --- a/ext/iconv/iconv.c +++ b/ext/iconv/iconv.c @@ -822,18 +822,16 @@ static php_iconv_err_t _php_iconv_strpos(unsigned int *pretval, j += GENERIC_SUPERSET_NBYTES; } - if (!_php_iconv_memequal(buf, &ndl_buf[i], sizeof(buf))) { - i = 0; - } - - if (i == 0) { - match_ofs = (unsigned int)-1; - } else { + if (_php_iconv_memequal(buf, &ndl_buf[i], sizeof(buf))) { match_ofs += (lim - i) / GENERIC_SUPERSET_NBYTES; i += GENERIC_SUPERSET_NBYTES; + ndl_buf_p = &ndl_buf[i]; + ndl_buf_left = ndl_buf_len - i; + } else { + match_ofs = (unsigned int)-1; + ndl_buf_p = ndl_buf; + ndl_buf_left = ndl_buf_len; } - ndl_buf_p = &ndl_buf[i]; - ndl_buf_left = ndl_buf_len - i; } } } else { @@ -867,18 +865,16 @@ static php_iconv_err_t _php_iconv_strpos(unsigned int *pretval, j += GENERIC_SUPERSET_NBYTES; } - if (!_php_iconv_memequal(buf, &ndl_buf[i], sizeof(buf))) { - i = 0; - } - - if (i == 0) { - match_ofs = (unsigned int)-1; - } else { + if (_php_iconv_memequal(buf, &ndl_buf[i], sizeof(buf))) { match_ofs += (lim - i) / GENERIC_SUPERSET_NBYTES; i += GENERIC_SUPERSET_NBYTES; + ndl_buf_p = &ndl_buf[i]; + ndl_buf_left = ndl_buf_len - i; + } else { + match_ofs = (unsigned int)-1; + ndl_buf_p = ndl_buf; + ndl_buf_left = ndl_buf_len; } - ndl_buf_p = &ndl_buf[i]; - ndl_buf_left = ndl_buf_len - i; } } } diff --git a/ext/iconv/tests/bug37176.phpt b/ext/iconv/tests/bug37176.phpt new file mode 100644 index 0000000000..3923dbd49c --- /dev/null +++ b/ext/iconv/tests/bug37176.phpt @@ -0,0 +1,10 @@ +--TEST-- +Bug #37176 (iconv_strpos() fails to find a string) +--FILE-- + +--EXPECT-- +int(1) +int(2)