msi: pcchValue represents the length of szValue in TCHARS, not bytes.

This commit is contained in:
James Hawkins 2007-07-02 20:17:59 -07:00 committed by Alexandre Julliard
parent 4d668e06a2
commit 0cd708e7f5
2 changed files with 15 additions and 6 deletions

View File

@ -184,6 +184,7 @@ UINT WINAPI MsiSourceListGetInfoA( LPCSTR szProduct, LPCSTR szUserSid,
if (!value) if (!value)
return ERROR_OUTOFMEMORY; return ERROR_OUTOFMEMORY;
*value = '\0';
ret = MsiSourceListGetInfoW(product, usersid, dwContext, dwOptions, ret = MsiSourceListGetInfoW(product, usersid, dwContext, dwOptions,
property, value, &len); property, value, &len);
if (ret != ERROR_SUCCESS) if (ret != ERROR_SUCCESS)
@ -341,10 +342,21 @@ UINT WINAPI MsiSourceListGetInfoW( LPCWSTR szProduct, LPCWSTR szUserSid,
} }
else if (strcmpW(INSTALLPROPERTY_PACKAGENAMEW, szProperty)==0) else if (strcmpW(INSTALLPROPERTY_PACKAGENAMEW, szProperty)==0)
{ {
rc = RegQueryValueExW(sourcekey, INSTALLPROPERTY_PACKAGENAMEW, 0, 0, *pcchValue = *pcchValue * sizeof(WCHAR);
(LPBYTE)szValue, pcchValue); rc = RegQueryValueExW(sourcekey, INSTALLPROPERTY_PACKAGENAMEW, 0, 0,
(LPBYTE)szValue, pcchValue);
if (rc != ERROR_SUCCESS && rc != ERROR_MORE_DATA) if (rc != ERROR_SUCCESS && rc != ERROR_MORE_DATA)
{
*pcchValue = 0;
rc = ERROR_SUCCESS; rc = ERROR_SUCCESS;
}
else
{
if (*pcchValue)
*pcchValue = (*pcchValue - 1) / sizeof(WCHAR);
if (szValue)
szValue[*pcchValue] = '\0';
}
} }
else else
{ {

View File

@ -209,10 +209,7 @@ static void test_MsiSourceListGetInfo(void)
r = MsiSourceListGetInfoA(prodcode, usersid, MSIINSTALLCONTEXT_USERUNMANAGED, r = MsiSourceListGetInfoA(prodcode, usersid, MSIINSTALLCONTEXT_USERUNMANAGED,
MSICODE_PRODUCT, INSTALLPROPERTY_PACKAGENAME, NULL, &size); MSICODE_PRODUCT, INSTALLPROPERTY_PACKAGENAME, NULL, &size);
ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r);
todo_wine ok(size == 0, "Expected 0, got %d\n", size);
{
ok(size == 0, "Expected 0, got %d\n", size);
}
data = "msitest.msi"; data = "msitest.msi";
res = RegSetValueExA(hkey, "PackageName", 0, REG_SZ, (const BYTE *)data, lstrlenA(data) + 1); res = RegSetValueExA(hkey, "PackageName", 0, REG_SZ, (const BYTE *)data, lstrlenA(data) + 1);