msi: Fix some NULL checking in MSI_RecordGetStringA.
authorAric Stewart <aric@codeweavers.com>
Wed, 17 Dec 2008 16:14:50 +0000 (10:14 -0600)
committerAlexandre Julliard <julliard@winehq.org>
Thu, 18 Dec 2008 13:19:40 +0000 (14:19 +0100)
Includes a few record tests with a NULL buffer.

dlls/msi/record.c
dlls/msi/tests/record.c

index 8b987f8f7385fd572811a133c9400226b61e002b..b02fcd10b9a64ec565b9244369a295bc57e5d906 100644 (file)
@@ -358,15 +358,16 @@ UINT MSI_RecordGetStringA(MSIRECORD *rec, UINT iField,
     case MSIFIELD_WSTR:
         len = WideCharToMultiByte( CP_ACP, 0, rec->fields[iField].u.szwVal, -1,
                              NULL, 0 , NULL, NULL);
-        WideCharToMultiByte( CP_ACP, 0, rec->fields[iField].u.szwVal, -1,
-                             szValue, *pcchValue, NULL, NULL);
+        if (szValue)
+            WideCharToMultiByte( CP_ACP, 0, rec->fields[iField].u.szwVal, -1,
+                                 szValue, *pcchValue, NULL, NULL);
         if( szValue && *pcchValue && len>*pcchValue )
             szValue[*pcchValue-1] = 0;
         if( len )
             len--;
         break;
     case MSIFIELD_NULL:
-        if( *pcchValue > 0 )
+        if( szValue && *pcchValue > 0 )
             szValue[0] = 0;
         break;
     default:
index f21131823cddded6921462fa1321003a472388cb..29a57a04f3012066195f17b982ba691a66f96f34 100644 (file)
@@ -361,6 +361,11 @@ static void test_MsiRecordGetString(void)
     rec = MsiCreateRecord(2);
     ok(rec != 0, "Expected a valid handle\n");
 
+    sz = MAX_PATH;
+    r = MsiRecordGetString(rec, 1, NULL, &sz);
+    ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n",r);
+    ok(sz == 0, "Expected 0, got %d\n",sz);
+
     sz = MAX_PATH;
     lstrcpyA(buf, "apple");
     r = MsiRecordGetString(rec, 1, buf, &sz);
@@ -383,6 +388,11 @@ static void test_MsiRecordGetString(void)
     r = MsiRecordSetInteger(rec, 1, 5);
     ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
 
+    sz = MAX_PATH;
+    r = MsiRecordGetString(rec, 1, NULL, &sz);
+    ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n",r);
+    ok(sz == 1, "Expected 1, got %d\n",sz);
+
     sz = MAX_PATH;
     lstrcpyA(buf, "apple");
     r = MsiRecordGetString(rec, 1, buf, &sz);