From: Jiajin Cui <cuijiajin@uniontech.com> Pass the ANSI buffer length in characters and account for the null terminator before copying the cache path. Remove temporary cache files when download or cache commit fails. Signed-off-by: Jiajin Cui <cuijiajin@uniontech.com> --- dlls/urlmon/umon.c | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/dlls/urlmon/umon.c b/dlls/urlmon/umon.c index 0ee8502d070..8f3fa892d83 100644 --- a/dlls/urlmon/umon.c +++ b/dlls/urlmon/umon.c @@ -850,7 +850,7 @@ HRESULT WINAPI URLDownloadToCacheFileA(LPUNKNOWN lpUnkCaller, LPCSTR szURL, LPST if(szFileName) file_name = malloc(dwBufLength * sizeof(WCHAR)); - hres = URLDownloadToCacheFileW(lpUnkCaller, url, file_name, dwBufLength*sizeof(WCHAR), + hres = URLDownloadToCacheFileW(lpUnkCaller, url, file_name, dwBufLength, dwReserved, pBSC); if(SUCCEEDED(hres) && file_name) @@ -887,8 +887,10 @@ HRESULT WINAPI URLDownloadToCacheFileW(LPUNKNOWN lpUnkCaller, LPCWSTR szURL, LPW return E_FAIL; hr = URLDownloadToFileW(lpUnkCaller, szURL, cache_path, 0, pBSC); - if (FAILED(hr)) + if (FAILED(hr)) { + DeleteFileW(cache_path); return hr; + } expire.dwHighDateTime = 0; expire.dwLowDateTime = 0; @@ -896,10 +898,12 @@ HRESULT WINAPI URLDownloadToCacheFileW(LPUNKNOWN lpUnkCaller, LPCWSTR szURL, LPW modified.dwLowDateTime = 0; if (!CommitUrlCacheEntryW(szURL, cache_path, expire, modified, NORMAL_CACHE_ENTRY, - header, sizeof(header), NULL, NULL)) + header, sizeof(header), NULL, NULL)) { + DeleteFileW(cache_path); return E_FAIL; + } - if (lstrlenW(cache_path) > dwBufLength) + if (lstrlenW(cache_path) + 1 > dwBufLength) return E_OUTOFMEMORY; lstrcpyW(szFileName, cache_path); -- GitLab https://gitlab.winehq.org/wine/wine/-/merge_requests/11255