Nikolay Sivov nsivov@codeweavers.com writes:
You shouldn't need anything of the kind. If StrStrIW doesn't work right it should be fixed (plus of course there's no reason to even use strstr() here at all).
On 1/25/2012 13:36, Alexandre Julliard wrote:
Nikolay Sivovnsivov@codeweavers.com writes:
You shouldn't need anything of the kind. If StrStrIW doesn't work right it should be fixed (plus of course there's no reason to even use strstr() here at all).
When I debugged that I remember there's was a problem with CompareStringW() actually. StrStrIW() eventually uses it like: --- iRet = CompareStringW(GetThreadLocale(), NORM_IGNORECASE, lpszStr, iLen, lpszComp, iLen); --- so both strings are passed with the same length. CompareStringW() in turn uses winelib's wine_compare_string() that tries to actualize passed string length look backwards from string tail searching for first not null - helper real_length(). So it easily gets past string data if specified length is large enough. Some tests show that CompareStringW() survives in such case - it uses 'or' it seems, so it doesn't matter what happens first: a null terminator or consumed chars count.
So yeah, this probably should be fixed, but requires winelib changes and a test that will crash without a fix, not in very reliable way depending on string length passed to it.
About avoiding strstr() at all, does this one look ok - http://bugs.winehq.org/attachment.cgi?id=38556 ?