Sync to Wine-0_9_4:
authorGé van Geldorp <ge@gse.nl>
Mon, 26 Dec 2005 23:10:21 +0000 (23:10 +0000)
committerGé van Geldorp <ge@gse.nl>
Mon, 26 Dec 2005 23:10:21 +0000 (23:10 +0000)
Magnus Olsen <magnus@itkonsult-olsen.com>
- msi: Fixed deformat_environment to not cut off string.
Bill Medland <billmedland@mercuryspeed.com>
- msi: Use a default dialog font if nothing is specified.
- msi: Prevent array underflow in MsiFormat when measuring with zero-length buffer.

svn path=/trunk/; revision=20349

reactos/lib/msi/dialog.c
reactos/lib/msi/format.c

index 87e14e8..c4f9d2c 100644 (file)
@@ -1618,6 +1618,8 @@ static LRESULT msi_dialog_oncreate( HWND hwnd, LPCREATESTRUCTW cs )
 {
     static const WCHAR df[] = {
         'D','e','f','a','u','l','t','U','I','F','o','n','t',0 };
+    static const WCHAR dfv[] = {
+        'M','S',' ','S','h','e','l','l',' ','D','l','g',0 };
     msi_dialog *dialog = (msi_dialog*) cs->lpCreateParams;
     MSIRECORD *rec = NULL;
     LPWSTR title = NULL;
@@ -1644,6 +1646,11 @@ static LRESULT msi_dialog_oncreate( HWND hwnd, LPCREATESTRUCTW cs )
     dialog->attributes = MSI_RecordGetInteger( rec, 6 );
 
     dialog->default_font = msi_dup_property( dialog->package, df );
+    if (!dialog->default_font)
+    {
+        dialog->default_font = strdupW(dfv);
+        if (!dialog->default_font) return -1;
+    }
 
     title = msi_get_deformatted_field( dialog->package, rec, 7 );
     SetWindowTextW( hwnd, title );
index c280541..85f9028 100644 (file)
@@ -639,10 +639,15 @@ UINT MSI_FormatRecordA( MSIPACKAGE* package, MSIRECORD* record, LPSTR buffer,
 
     len = deformat_string_internal(package,rec,&deformated,strlenW(rec),
                                    record, NULL);
+    /* If len is zero then WideCharToMultiByte will return 0 indicating 
+     * failure, but that will do just as well since we are ignoring
+     * possible errors.
+     */
     lenA = WideCharToMultiByte(CP_ACP,0,deformated,len,NULL,0,NULL,NULL);
 
     if (buffer)
     {
+        /* Ditto above */
         WideCharToMultiByte(CP_ACP,0,deformated,len,buffer,*size,NULL, NULL);
         if (*size>lenA)
         {
@@ -652,7 +657,8 @@ UINT MSI_FormatRecordA( MSIPACKAGE* package, MSIRECORD* record, LPSTR buffer,
         else
         {
             rc = ERROR_MORE_DATA;
-            buffer[(*size)-1] = 0;    
+            if (*size)
+                buffer[(*size)-1] = 0;
         }
     }
     else