Module: wine Branch: master Commit: ceea5bda14ecf4c8ce262fc7ab88df49e500bc38 URL: https://source.winehq.org/git/wine.git/?a=commit;h=ceea5bda14ecf4c8ce262fc7a...
Author: Alexandre Julliard julliard@winehq.org Date: Thu Sep 6 12:59:45 2018 +0200
shell32: Avoid infinite loop in _SHExpandEnvironmentStrings.
Signed-off-by: Alexandre Julliard julliard@winehq.org
---
dlls/shell32/shellpath.c | 13 +++---------- 1 file changed, 3 insertions(+), 10 deletions(-)
diff --git a/dlls/shell32/shellpath.c b/dlls/shell32/shellpath.c index afd6340..dccfbba 100644 --- a/dlls/shell32/shellpath.c +++ b/dlls/shell32/shellpath.c @@ -3855,22 +3855,15 @@ static HRESULT _SHExpandEnvironmentStrings(LPCWSTR szSrc, LPWSTR szDest) } else { - DWORD ret = ExpandEnvironmentStringsW(szSrc, szDest, MAX_PATH); + DWORD ret = ExpandEnvironmentStringsW(szTemp, szDest, MAX_PATH);
if (ret > MAX_PATH) hr = E_NOT_SUFFICIENT_BUFFER; else if (ret == 0) hr = HRESULT_FROM_WIN32(GetLastError()); - else - hr = S_OK; - } - if (SUCCEEDED(hr) && szDest[0] == '%') - strcpyW(szTemp, szDest); - else - { - /* terminate loop */ - szTemp[0] = '\0'; + else if (!strcmpW( szTemp, szDest )) break; /* nothing expanded */ } + if (SUCCEEDED(hr)) strcpyW(szTemp, szDest); } end: if (key)