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