[PATCH 1/6] msi: Make MsiGetProperty() RPC-compatible.
Zebediah Figura
z.figura12 at gmail.com
Tue Apr 17 09:29:51 CDT 2018
On 17/04/18 07:20, Hans Leidekker wrote:
> On Mon, 2018-04-16 at 20:20 -0500, Zebediah Figura wrote:
>> +++ b/dlls/msi/package.c
>> @@ -2396,52 +2396,23 @@ static UINT MSI_GetProperty( MSIHANDLE handle, LPCWSTR name,
>> package = msihandle2msiinfo( handle, MSIHANDLETYPE_PACKAGE );
>> if (!package)
>> {
>> - HRESULT hr;
>> LPWSTR value = NULL;
>> MSIHANDLE remote;
>> - BSTR bname;
>>
>> if (!(remote = msi_get_remote(handle)))
>> return ERROR_INVALID_HANDLE;
>>
>> - bname = SysAllocString( name );
>> - if (!bname)
>> - return ERROR_OUTOFMEMORY;
>> + r = remote_GetProperty(remote, name, &value);
>> + if (r != ERROR_SUCCESS)
>> + return r;
>>
>> - hr = remote_GetProperty(remote, bname, NULL, &len);
>> - if (FAILED(hr))
>> - goto done;
>> -
>> - len++;
>> - value = msi_alloc(len * sizeof(WCHAR));
>> - if (!value)
>> - {
>> - r = ERROR_OUTOFMEMORY;
>> - goto done;
>> - }
>> -
>> - hr = remote_GetProperty(remote, bname, value, &len);
>> - if (FAILED(hr))
>> - goto done;
>> -
>> - r = msi_strcpy_to_awstring( value, len, szValueBuf, pchValueBuf );
>> + r = msi_strcpy_to_awstring(value, -1, szValueBuf, pchValueBuf);
>
> Property values can contain embedded nulls. You can't set such values
> through MsiSetProperty but MsiGetProperty returns the full value and size
> if the property is set by other means. If the remote case behaves the same
> you'll have to keep the length parameter.
>
>
>
It seems that the remote case returns the correct length but truncates
the value to the first null. I'll send an updated patch.
More information about the wine-devel
mailing list