crypt32: Set correct return value if CryptMemAlloc fails

Sebastian Lackner sebastian at fds-team.de
Sat Dec 7 23:16:39 CST 2013


This patch (hopefully) fixes all positions in crypt32 where the return
value is not set correctly if CryptMemAlloc fails (the value is still
set to TRUE from a previous statement).

---
 dlls/crypt32/cert.c      |    8 ++++++++
 dlls/crypt32/chain.c     |    2 ++
 dlls/crypt32/filestore.c |    2 ++
 dlls/crypt32/object.c    |    2 ++
 4 files changed, 14 insertions(+)
-------------- next part --------------
>From 8255bf5d6b35ad6318b8e4b38db67bc09666369e Mon Sep 17 00:00:00 2001
From: Sebastian Lackner <sebastian at fds-team.de>
Date: Sun, 8 Dec 2013 06:09:17 +0100
Subject: crypt32: Set correct return value if CryptMemAlloc fails

---
 dlls/crypt32/cert.c      |    8 ++++++++
 dlls/crypt32/chain.c     |    2 ++
 dlls/crypt32/filestore.c |    2 ++
 dlls/crypt32/object.c    |    2 ++
 4 files changed, 14 insertions(+)

diff --git a/dlls/crypt32/cert.c b/dlls/crypt32/cert.c
index 0f14ffb..074b924 100644
--- a/dlls/crypt32/cert.c
+++ b/dlls/crypt32/cert.c
@@ -1466,6 +1466,8 @@ static BOOL compare_cert_by_cert_id(PCCERT_CONTEXT pCertContext, DWORD dwType,
                 ret = !memcmp(buf, id->u.KeyId.pbData, size);
                 CryptMemFree(buf);
             }
+            else
+                ret = FALSE;
         }
         else
             ret = FALSE;
@@ -1506,6 +1508,8 @@ static BOOL compare_cert_by_signature_hash(PCCERT_CONTEXT pCertContext, DWORD dw
             ret = !memcmp(buf, hash->pbData, size);
             CryptMemFree(buf);
         }
+        else
+            ret = FALSE;
     }
     else
         ret = FALSE;
@@ -2375,10 +2379,14 @@ BOOL WINAPI CryptSignAndEncodeCertificate(HCRYPTPROV_OR_NCRYPT_KEY_HANDLE hCrypt
                         }
                         CryptMemFree(hash);
                     }
+                    else
+                        ret = FALSE;
                 }
             }
             CryptMemFree(encoded);
         }
+        else
+            ret = FALSE;
     }
     return ret;
 }
diff --git a/dlls/crypt32/chain.c b/dlls/crypt32/chain.c
index 1a83dee..427db63 100644
--- a/dlls/crypt32/chain.c
+++ b/dlls/crypt32/chain.c
@@ -306,6 +306,8 @@ static BOOL CRYPT_IsCertificateSelfSigned(PCCERT_CONTEXT cert)
                         ret = !memcmp(buf, info->KeyId.pbData, size);
                         CryptMemFree(buf);
                     }
+                    else
+                        ret = FALSE;
                 }
                 else
                     ret = FALSE;
diff --git a/dlls/crypt32/filestore.c b/dlls/crypt32/filestore.c
index 81c8c5e..0f7d8d5 100644
--- a/dlls/crypt32/filestore.c
+++ b/dlls/crypt32/filestore.c
@@ -122,6 +122,8 @@ static BOOL CRYPT_ReadBlobFromFile(HANDLE file, PCERT_BLOB blob)
             ret = ReadFile(file, blob->pbData, blob->cbData, &read, NULL) && read == blob->cbData;
             if (!ret) CryptMemFree(blob->pbData);
         }
+        else
+            ret = FALSE;
     }
     return ret;
 }
diff --git a/dlls/crypt32/object.c b/dlls/crypt32/object.c
index 39955ce..0320cfd 100644
--- a/dlls/crypt32/object.c
+++ b/dlls/crypt32/object.c
@@ -55,6 +55,8 @@ static BOOL CRYPT_ReadBlobFromFile(LPCWSTR fileName, PCERT_BLOB blob)
                 ret = ReadFile(file, blob->pbData, blob->cbData, &read, NULL) && read == blob->cbData;
                 if (!ret) CryptMemFree(blob->pbData);
             }
+            else
+                ret = FALSE;
         }
         CloseHandle(file);
     }
-- 
1.7.9.5



More information about the wine-patches mailing list