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.