Mike McCormack : msi: Test MsiRecordGetString on an integer record fields with a NULL output buffer .

Alexandre Julliard julliard at wine.codeweavers.com
Tue Nov 21 08:14:50 CST 2006


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

Author: Mike McCormack <mike at codeweavers.com>
Date:   Tue Nov 21 15:21:27 2006 +0900

msi: Test MsiRecordGetString on an integer record fields with a NULL output buffer.

---

 dlls/msi/record.c       |   11 +++++++----
 dlls/msi/tests/record.c |    9 +++++++++
 2 files changed, 16 insertions(+), 4 deletions(-)

diff --git a/dlls/msi/record.c b/dlls/msi/record.c
index 6705a03..bf01b20 100644
--- a/dlls/msi/record.c
+++ b/dlls/msi/record.c
@@ -273,7 +273,7 @@ UINT MSI_RecordSetInteger( MSIRECORD *re
 
     if( iField > rec->count )
         return ERROR_INVALID_PARAMETER;
- 
+
     MSI_FreeField( &rec->fields[iField] );
     rec->fields[iField].type = MSIFIELD_INT;
     rec->fields[iField].u.iVal = iVal;
@@ -346,7 +346,8 @@ UINT MSI_RecordGetStringA(MSIRECORD *rec
     case MSIFIELD_INT:
         wsprintfA(buffer, "%d", rec->fields[iField].u.iVal);
         len = lstrlenA( buffer );
-        lstrcpynA(szValue, buffer, *pcchValue);
+        if (szValue)
+            lstrcpynA(szValue, buffer, *pcchValue);
         break;
     case MSIFIELD_WSTR:
         len = WideCharToMultiByte( CP_ACP, 0, rec->fields[iField].u.szwVal, -1,
@@ -421,11 +422,13 @@ UINT MSI_RecordGetStringW(MSIRECORD *rec
     case MSIFIELD_INT:
         wsprintfW(buffer, szFormat, rec->fields[iField].u.iVal);
         len = lstrlenW( buffer );
-        lstrcpynW(szValue, buffer, *pcchValue);
+        if (szValue)
+            lstrcpynW(szValue, buffer, *pcchValue);
         break;
     case MSIFIELD_WSTR:
         len = lstrlenW( rec->fields[iField].u.szwVal );
-        lstrcpynW(szValue, rec->fields[iField].u.szwVal, *pcchValue);
+        if (szValue)
+            lstrcpynW(szValue, rec->fields[iField].u.szwVal, *pcchValue);
         break;
     case MSIFIELD_NULL:
         len = 1;
diff --git a/dlls/msi/tests/record.c b/dlls/msi/tests/record.c
index 8bf6489..1f72d12 100644
--- a/dlls/msi/tests/record.c
+++ b/dlls/msi/tests/record.c
@@ -250,6 +250,10 @@ static void test_msirecord(void)
     /* same record, try converting integers to strings */
     r = MsiRecordSetInteger(h, 0, 32);
     ok(r == ERROR_SUCCESS, "Failed to set integer at 0 to 32\n");
+    sz = 1;
+    r = MsiRecordGetString(h, 0, NULL, &sz);
+    ok(r == ERROR_SUCCESS, "failed to get string from integer\n");
+    ok(sz == 2, "length wrong\n");
     buf[0]=0;
     sz = sizeof buf;
     r = MsiRecordGetString(h, 0, buf, &sz);
@@ -258,10 +262,15 @@ static void test_msirecord(void)
     r = MsiRecordSetInteger(h, 0, -32);
     ok(r == ERROR_SUCCESS, "Failed to set integer at 0 to 32\n");
     buf[0]=0;
+    sz = 1;
+    r = MsiRecordGetString(h, 0, NULL, &sz);
+    ok(r == ERROR_SUCCESS, "failed to get string from integer\n");
+    ok(sz == 3, "length wrong\n");
     sz = sizeof buf;
     r = MsiRecordGetString(h, 0, buf, &sz);
     ok(r == ERROR_SUCCESS, "failed to get string from integer\n");
     ok(0==strcmp(buf,"-32"), "failed to get string from integer\n");
+    buf[0]=0;
 
     /* same record, now try streams */
     r = MsiRecordSetStream(h, 0, NULL);




More information about the wine-cvs mailing list