[PATCH v2 4/5] msi: Don't reimplement record formatting.

Zebediah Figura z.figura12 at gmail.com
Mon Jun 19 11:42:47 CDT 2017


On 06/19/2017 04:45 AM, Hans Leidekker wrote:
> On Sun, 2017-06-18 at 21:53 -0500, Zebediah Figura wrote:
>> diff --git a/dlls/msi/package.c b/dlls/msi/package.c
>> index eae01e0..f16b1dc 100644
>> --- a/dlls/msi/package.c
>> +++ b/dlls/msi/package.c
>> @@ -1709,8 +1709,8 @@ INT MSI_ProcessMessage( MSIPACKAGE *package, INSTALLMESSAGE eMessageType, MSIREC
>>       static const WCHAR szSetProgress[] = {'S','e','t','P','r','o','g','r','e','s','s',0};
>>       static const WCHAR szActionText[] = {'A','c','t','i','o','n','T','e','x','t',0};
>>       MSIRECORD *uirow;
>> -    LPWSTR deformated, message;
>> -    DWORD i, len, total_len, log_type = 0;
>> +    LPWSTR deformated, message = {0};
>> +    DWORD len, log_type = 0;
>>       INT rc = 0;
>>       char *msg;
>>   
>> @@ -1776,39 +1776,10 @@ INT MSI_ProcessMessage( MSIPACKAGE *package, INSTALLMESSAGE eMessageType, MSIREC
>>       }
>>       else
>>       {
>> -        static const WCHAR format[] = {'%','u',':',' ',0};
>> -        UINT count = MSI_RecordGetFieldCount( record );
>> -        WCHAR *p;
>> -
>> -        total_len = 1;
>> -        for (i = 1; i <= count; i++)
>> -        {
>> -            len = 0;
>> -            MSI_RecordGetStringW( record, i, NULL, &len );
>> -            total_len += len + 13;
>> -        }
>> -        p = message = msi_alloc( total_len * sizeof(WCHAR) );
>> -        if (!p) return ERROR_OUTOFMEMORY;
>> -
>> -        for (i = 1; i <= count; i++)
>> -        {
>> -            if (count > 1)
>> -            {
>> -                len = sprintfW( p, format, i );
>> -                total_len -= len;
>> -                p += len;
>> -            }
>> -            len = total_len;
>> -            MSI_RecordGetStringW( record, i, p, &len );
>> -            total_len -= len;
>> -            p += len;
>> -            if (count > 1 && total_len)
>> -            {
>> -                *p++ = ' ';
>> -                total_len--;
>> -            }
>> -        }
>> -        p[0] = 0;
>> +        MSI_FormatRecordW(package, record, message, &len);
>> +        len++;
>> +        message = msi_alloc(len * sizeof(WCHAR));
>> +        MSI_FormatRecordW(package, record, message, &len);
> 
> You can pass a NULL buffer in the size query. Please keep the check for
> allocation failure. I would check the first call to MSI_FormatRecordW
> too since the record is passed by the caller.
> 
> 

I'll send an updated patch.



More information about the wine-devel mailing list