Module: wine Branch: master Commit: 1ea7666c57e7420ae190008d52aeca1587cec8fb URL: http://source.winehq.org/git/wine.git/?a=commit;h=1ea7666c57e7420ae190008d52...
Author: Rob Shearman rob@codeweavers.com Date: Wed Apr 30 15:23:44 2008 +0100
wininet: Don't crash in GetUrlCacheEntryInfoA/W if lpdwCacheEntryInfoBufferSize is NULL.
---
dlls/wininet/urlcache.c | 46 ++++++++++++++++++++++++++-------------------- 1 files changed, 26 insertions(+), 20 deletions(-)
diff --git a/dlls/wininet/urlcache.c b/dlls/wininet/urlcache.c index ba16ed2..f34451a 100644 --- a/dlls/wininet/urlcache.c +++ b/dlls/wininet/urlcache.c @@ -1526,18 +1526,21 @@ BOOL WINAPI GetUrlCacheEntryInfoA( if (pUrlEntry->dwOffsetHeaderInfo) TRACE("Header info: %s\n", debugstr_a((LPSTR)pUrlEntry + pUrlEntry->dwOffsetHeaderInfo));
- if (!URLCache_CopyEntry( - pContainer, - pHeader, - lpCacheEntryInfo, - lpdwCacheEntryInfoBufferSize, - pUrlEntry, - FALSE /* ANSI */)) - { - URLCacheContainer_UnlockIndex(pContainer, pHeader); - return FALSE; + if (lpdwCacheEntryInfoBufferSize) + { + if (!URLCache_CopyEntry( + pContainer, + pHeader, + lpCacheEntryInfo, + lpdwCacheEntryInfoBufferSize, + pUrlEntry, + FALSE /* ANSI */)) + { + URLCacheContainer_UnlockIndex(pContainer, pHeader); + return FALSE; + } + TRACE("Local File Name: %s\n", debugstr_a(lpCacheEntryInfo->lpszLocalFileName)); } - TRACE("Local File Name: %s\n", debugstr_a(lpCacheEntryInfo->lpszLocalFileName));
URLCacheContainer_UnlockIndex(pContainer, pHeader);
@@ -1590,18 +1593,21 @@ BOOL WINAPI GetUrlCacheEntryInfoW(LPCWSTR lpszUrl, TRACE("Found URL: %s\n", debugstr_a((LPSTR)pUrlEntry + pUrlEntry->dwOffsetUrl)); TRACE("Header info: %s\n", debugstr_a((LPSTR)pUrlEntry + pUrlEntry->dwOffsetHeaderInfo));
- if (!URLCache_CopyEntry( - pContainer, - pHeader, - (LPINTERNET_CACHE_ENTRY_INFOA)lpCacheEntryInfo, - lpdwCacheEntryInfoBufferSize, - pUrlEntry, - TRUE /* UNICODE */)) + if (lpdwCacheEntryInfoBufferSize) { - URLCacheContainer_UnlockIndex(pContainer, pHeader); - return FALSE; + if (!URLCache_CopyEntry( + pContainer, + pHeader, + (LPINTERNET_CACHE_ENTRY_INFOA)lpCacheEntryInfo, + lpdwCacheEntryInfoBufferSize, + pUrlEntry, + TRUE /* UNICODE */)) + { + URLCacheContainer_UnlockIndex(pContainer, pHeader); + return FALSE; + } + TRACE("Local File Name: %s\n", debugstr_w(lpCacheEntryInfo->lpszLocalFileName)); } - TRACE("Local File Name: %s\n", debugstr_w(lpCacheEntryInfo->lpszLocalFileName));
URLCacheContainer_UnlockIndex(pContainer, pHeader);