fix false negatives with periodic needles in strstr, wcsstr, and memmem

in cases where the memorized match range from the right factor
exceeded the length of the left factor, it was wrongly treated as a
mismatch rather than a match.

issue reported by Yves Bastide.
This commit is contained in:
Rich Felker
2014-04-18 17:38:35 -04:00
parent fbeadd150f
commit 476cd1d965
3 changed files with 3 additions and 3 deletions

View File

@ -84,7 +84,7 @@ static wchar_t *twoway_wcsstr(const wchar_t *h, const wchar_t *n)
}
/* Compare left half */
for (k=ms+1; k>mem && n[k-1] == h[k-1]; k--);
if (k == mem) return (wchar_t *)h;
if (k <= mem) return (wchar_t *)h;
h += p;
mem = mem0;
}