[PATCH 04/16] [Crypt32]: string functions

Eric Pouech eric.pouech at wanadoo.fr
Sun Oct 22 14:48:11 CDT 2006


- fix CertStrToNameA when pszX500 is NULL

A+
---

 dlls/crypt32/str.c |   34 ++++++++++++++++++----------------
 1 files changed, 18 insertions(+), 16 deletions(-)

diff --git a/dlls/crypt32/str.c b/dlls/crypt32/str.c
index e74fc7d..e1dc31f 100644
--- a/dlls/crypt32/str.c
+++ b/dlls/crypt32/str.c
@@ -427,32 +427,34 @@ BOOL WINAPI CertStrToNameA(DWORD dwCertE
  LPCSTR *ppszError)
 {
     LPWSTR x500, errorStr;
-    BOOL ret;
+    BOOL ret = FALSE;
     int len;
 
     TRACE("(%08x, %s, %08x, %p, %p, %p, %p)\n", dwCertEncodingType,
      debugstr_a(pszX500), dwStrType, pvReserved, pbEncoded, pcbEncoded,
      ppszError);
 
-    len = MultiByteToWideChar(CP_ACP, 0, pszX500, -1, NULL, 0);
-    x500 = CryptMemAlloc(len * sizeof(WCHAR));
-    if (x500)
+    if (pszX500)
     {
+        len = MultiByteToWideChar(CP_ACP, 0, pszX500, -1, NULL, 0);
+        x500 = CryptMemAlloc(len * sizeof(WCHAR));
+        if (!x500) goto done;
         MultiByteToWideChar(CP_ACP, 0, pszX500, -1, x500, len);
-        ret = CertStrToNameW(dwCertEncodingType, x500, dwStrType, pvReserved,
-         pbEncoded, pcbEncoded, ppszError ? (LPCWSTR *)&errorStr : NULL);
-        if (ppszError)
-        {
-            DWORD i;
+    }
+    else x500 = NULL;
+    ret = CertStrToNameW(dwCertEncodingType, x500, dwStrType, pvReserved,
+                    pbEncoded, pcbEncoded, ppszError ? (LPCWSTR *)&errorStr : NULL);
+    if (ppszError)
+    {
+        DWORD i;
 
-            *ppszError = pszX500;
-            for (i = 0; i < errorStr - x500; i++)
-                CharNextA(*ppszError);
-        }
-        CryptMemFree(x500);
+        *ppszError = pszX500;
+        for (i = 0; i < errorStr - x500; i++)
+            CharNextA(*ppszError);
     }
-    else
-        ret = FALSE;
+    CryptMemFree(x500);
+    ret = TRUE;
+done:
     return ret;
 }
 



More information about the wine-patches mailing list