Juan Lang : crypt32: Don't allocate a 0-length string.

Alexandre Julliard julliard at winehq.org
Mon Oct 22 09:55:30 CDT 2007


Module: wine
Branch: master
Commit: e0b8e37bf036cbe8b28979b6b504b40a3f97920c
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=e0b8e37bf036cbe8b28979b6b504b40a3f97920c

Author: Juan Lang <juan.lang at gmail.com>
Date:   Sat Oct 20 14:25:15 2007 -0700

crypt32: Don't allocate a 0-length string.

---

 dlls/crypt32/str.c |   35 +++++++++++++++++++++++------------
 1 files changed, 23 insertions(+), 12 deletions(-)

diff --git a/dlls/crypt32/str.c b/dlls/crypt32/str.c
index 9677897..a4dc60f 100644
--- a/dlls/crypt32/str.c
+++ b/dlls/crypt32/str.c
@@ -640,22 +640,33 @@ static BOOL CRYPT_EncodeValueWithType(DWORD dwCertEncodingType,
  LPCWSTR *ppszError)
 {
     CERT_NAME_VALUE nameValue = { type, { 0, NULL } };
-    BOOL ret = FALSE;
+    BOOL ret = TRUE;
 
-    nameValue.Value.pbData = CryptMemAlloc((value->end - value->start) *
-     sizeof(WCHAR));
-    if (nameValue.Value.pbData)
+    if (value->end > value->start)
     {
-        DWORD i;
-        LPWSTR ptr = (LPWSTR)nameValue.Value.pbData;
-
-        for (i = 0; i < value->end - value->start; i++)
+        nameValue.Value.pbData = CryptMemAlloc((value->end - value->start) *
+         sizeof(WCHAR));
+        if (!nameValue.Value.pbData)
         {
-            *ptr++ = value->start[i];
-            if (value->start[i] == '"')
-                i++;
+            SetLastError(ERROR_OUTOFMEMORY);
+            ret = FALSE;
+        }
+    }
+    if (ret)
+    {
+        if (value->end > value->start)
+        {
+            DWORD i;
+            LPWSTR ptr = (LPWSTR)nameValue.Value.pbData;
+
+            for (i = 0; i < value->end - value->start; i++)
+            {
+                *ptr++ = value->start[i];
+                if (value->start[i] == '"')
+                    i++;
+            }
+            nameValue.Value.cbData = (LPBYTE)ptr - nameValue.Value.pbData;
         }
-        nameValue.Value.cbData = (LPBYTE)ptr - nameValue.Value.pbData;
         ret = CryptEncodeObjectEx(dwCertEncodingType, X509_UNICODE_NAME_VALUE,
          &nameValue, CRYPT_ENCODE_ALLOC_FLAG, NULL, &output->pbData,
          &output->cbData);




More information about the wine-cvs mailing list