diff --git a/dlls/shlwapi/string.c b/dlls/shlwapi/string.c index b4b5b8af537..eaaaf3bd2ab 100644 --- a/dlls/shlwapi/string.c +++ b/dlls/shlwapi/string.c @@ -364,7 +364,7 @@ int WINAPI StrCmpIW(LPCWSTR lpszStr, LPCWSTR lpszComp) * PARAMS * lpszStr [I] First string to compare * lpszComp [I] Second string to compare - * iLen [I] Maximum number of chars to compare. + * iLen [I] Number of chars to compare * * RETURNS * An integer less than, equal to or greater than 0, indicating that @@ -395,7 +395,7 @@ INT WINAPI StrCmpNW(LPCWSTR lpszStr, LPCWSTR lpszComp, INT iLen) * PARAMS * lpszStr [I] First string to compare * lpszComp [I] Second string to compare - * iLen [I] Maximum number of chars to compare. + * iLen [I] Number of chars to compare * * RETURNS * An integer less than, equal to or greater than 0, indicating that @@ -521,13 +521,15 @@ static LPSTR SHLWAPI_StrStrHelperA(LPCSTR lpszStr, LPCSTR lpszSearch, INT (WINAPI *pStrCmpFn)(LPCSTR,LPCSTR,INT)) { size_t iLen; + LPCSTR end; if (!lpszStr || !lpszSearch || !*lpszSearch) return NULL; iLen = strlen(lpszSearch); + end = lpszStr + strlen(lpszStr); - while (*lpszStr) + while (lpszStr + iLen <= end) { if (!pStrCmpFn(lpszStr, lpszSearch, iLen)) return (LPSTR)lpszStr; @@ -670,6 +672,7 @@ LPSTR WINAPI StrStrIA(LPCSTR lpszStr, LPCSTR lpszSearch) LPWSTR WINAPI StrStrIW(LPCWSTR lpszStr, LPCWSTR lpszSearch) { int iLen; + LPCWSTR end; TRACE("(%s,%s)\n", debugstr_w(lpszStr), debugstr_w(lpszSearch)); @@ -677,8 +680,9 @@ LPWSTR WINAPI StrStrIW(LPCWSTR lpszStr, LPCWSTR lpszSearch) return NULL; iLen = strlenW(lpszSearch); + end = lpszStr + strlenW(lpszStr); - while (*lpszStr) + while (lpszStr + iLen <= end) { if (!StrCmpNIW(lpszStr, lpszSearch, iLen)) return (LPWSTR)lpszStr;