Piotr Caban : cryptnet: Fixed cache functions usage in CRYPT_CacheURL function.
Alexandre Julliard
julliard at winehq.org
Wed Oct 3 13:20:35 CDT 2012
Module: wine
Branch: master
Commit: 5e6e26e1dfac3ba613f7ed9a1139959c060fa218
URL: http://source.winehq.org/git/wine.git/?a=commit;h=5e6e26e1dfac3ba613f7ed9a1139959c060fa218
Author: Piotr Caban <piotr at codeweavers.com>
Date: Wed Oct 3 11:17:07 2012 +0200
cryptnet: Fixed cache functions usage in CRYPT_CacheURL function.
---
dlls/cryptnet/cryptnet_main.c | 80 ++++++++++++++++++-----------------------
1 files changed, 35 insertions(+), 45 deletions(-)
diff --git a/dlls/cryptnet/cryptnet_main.c b/dlls/cryptnet/cryptnet_main.c
index 3143604..652c812 100644
--- a/dlls/cryptnet/cryptnet_main.c
+++ b/dlls/cryptnet/cryptnet_main.c
@@ -731,21 +731,24 @@ static void CRYPT_CacheURL(LPCWSTR pszURL, const CRYPT_BLOB_ARRAY *pObject,
DWORD dwRetrievalFlags, FILETIME expires)
{
WCHAR cacheFileName[MAX_PATH];
- DWORD size = 0;
- BOOL ret, create = FALSE;
+ HANDLE hCacheFile;
+ DWORD size = 0, entryType;
+ FILETIME ft;
GetUrlCacheEntryInfoW(pszURL, NULL, &size);
if (GetLastError() == ERROR_INSUFFICIENT_BUFFER)
{
INTERNET_CACHE_ENTRY_INFOW *info = CryptMemAlloc(size);
- if (info)
+ if (!info)
{
- FILETIME ft;
+ ERR("out of memory\n");
+ return;
+ }
- ret = GetUrlCacheEntryInfoW(pszURL, info, &size);
- if (ret)
- lstrcpyW(cacheFileName, info->lpszLocalFileName);
+ if (GetUrlCacheEntryInfoW(pszURL, info, &size))
+ {
+ lstrcpyW(cacheFileName, info->lpszLocalFileName);
/* Check if the existing cache entry is up to date. If it isn't,
* remove the existing cache entry, and create a new one with the
* new value.
@@ -753,51 +756,38 @@ static void CRYPT_CacheURL(LPCWSTR pszURL, const CRYPT_BLOB_ARRAY *pObject,
GetSystemTimeAsFileTime(&ft);
if (CompareFileTime(&info->ExpireTime, &ft) < 0)
{
- create = TRUE;
DeleteUrlCacheEntryW(pszURL);
+ CryptMemFree(info);
+ }
+ else
+ {
+ info->ExpireTime = expires;
+ SetUrlCacheEntryInfoW(pszURL, info, CACHE_ENTRY_EXPTIME_FC);
+ CryptMemFree(info);
+ return;
}
- CryptMemFree(info);
}
- else
- ret = FALSE;
}
- else
- {
- ret = CreateUrlCacheEntryW(pszURL, pObject->rgBlob[0].cbData, NULL,
- cacheFileName, 0);
- create = TRUE;
- }
- if (ret)
- {
- DWORD entryType;
- FILETIME ft = { 0 };
- if (create)
- {
- HANDLE hCacheFile = CreateFileW(cacheFileName, GENERIC_WRITE, 0,
- NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
+ if (!CreateUrlCacheEntryW(pszURL, pObject->rgBlob[0].cbData, NULL, cacheFileName, 0))
+ return;
- if (hCacheFile != INVALID_HANDLE_VALUE)
- {
- DWORD bytesWritten;
+ hCacheFile = CreateFileW(cacheFileName, GENERIC_WRITE, 0,
+ NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
+ if(hCacheFile == INVALID_HANDLE_VALUE)
+ return;
- WriteFile(hCacheFile, pObject->rgBlob[0].pbData,
- pObject->rgBlob[0].cbData, &bytesWritten, NULL);
- CloseHandle(hCacheFile);
- }
- else
- ret = FALSE;
- }
- if (ret)
- {
- if (!(dwRetrievalFlags & CRYPT_STICKY_CACHE_RETRIEVAL))
- entryType = NORMAL_CACHE_ENTRY;
- else
- entryType = STICKY_CACHE_ENTRY;
- CommitUrlCacheEntryW(pszURL, cacheFileName, expires, ft, entryType,
- NULL, 0, NULL, NULL);
- }
- }
+ WriteFile(hCacheFile, pObject->rgBlob[0].pbData,
+ pObject->rgBlob[0].cbData, &size, NULL);
+ CloseHandle(hCacheFile);
+
+ if (!(dwRetrievalFlags & CRYPT_STICKY_CACHE_RETRIEVAL))
+ entryType = NORMAL_CACHE_ENTRY;
+ else
+ entryType = STICKY_CACHE_ENTRY;
+ memset(&ft, 0, sizeof(ft));
+ CommitUrlCacheEntryW(pszURL, cacheFileName, expires, ft, entryType,
+ NULL, 0, NULL, NULL);
}
static void CALLBACK CRYPT_InetStatusCallback(HINTERNET hInt,
More information about the wine-cvs
mailing list