msi: Avoid creating zero-length string values in the registry.

This commit is contained in:
Alexandre Julliard 2008-04-22 17:05:05 +02:00
parent 31ed6473be
commit 06bf8ea291
3 changed files with 10 additions and 5 deletions

View File

@ -2426,7 +2426,7 @@ static UINT ITERATE_WriteRegistryValues(MSIRECORD *row, LPVOID param)
{ {
static const WCHAR szEmpty[] = {0}; static const WCHAR szEmpty[] = {0};
value_data = (LPSTR)strdupW(szEmpty); value_data = (LPSTR)strdupW(szEmpty);
size = 0; size = sizeof(szEmpty);
type = REG_SZ; type = REG_SZ;
} }
@ -3772,8 +3772,10 @@ static UINT ACTION_PublishFeatures(MSIPACKAGE *package)
size = strlenW(feature->Feature_Parent)*sizeof(WCHAR); size = strlenW(feature->Feature_Parent)*sizeof(WCHAR);
if (!absent) if (!absent)
{ {
static const WCHAR emptyW[] = {0};
size += sizeof(WCHAR);
RegSetValueExW(hukey,feature->Feature,0,REG_SZ, RegSetValueExW(hukey,feature->Feature,0,REG_SZ,
(LPBYTE)feature->Feature_Parent,size); (LPBYTE)(feature->Feature_Parent ? feature->Feature_Parent : emptyW),size);
} }
else else
{ {

View File

@ -381,7 +381,7 @@ DWORD msi_version_str_to_dword(LPCWSTR p)
LPWSTR msi_version_dword_to_str(DWORD version) LPWSTR msi_version_dword_to_str(DWORD version)
{ {
const WCHAR fmt[] = { '%','u','.','%','u','.','%','u',0 }; static const WCHAR fmt[] = { '%','u','.','%','u','.','%','u',0 };
LPWSTR str = msi_alloc(20); LPWSTR str = msi_alloc(20);
sprintfW(str, fmt, sprintfW(str, fmt,
(version&0xff000000)>>24, (version&0xff000000)>>24,
@ -392,7 +392,10 @@ LPWSTR msi_version_dword_to_str(DWORD version)
LONG msi_reg_set_val_str( HKEY hkey, LPCWSTR name, LPCWSTR value ) LONG msi_reg_set_val_str( HKEY hkey, LPCWSTR name, LPCWSTR value )
{ {
DWORD len = value ? (lstrlenW(value) + 1) * sizeof (WCHAR) : 0; static const WCHAR emptyW[] = {0};
DWORD len;
if (!value) value = emptyW;
len = (lstrlenW(value) + 1) * sizeof (WCHAR);
return RegSetValueExW( hkey, name, 0, REG_SZ, (const BYTE *)value, len ); return RegSetValueExW( hkey, name, 0, REG_SZ, (const BYTE *)value, len );
} }

View File

@ -822,7 +822,7 @@ UINT WINAPI MsiSourceListSetInfoW( LPCWSTR szProduct, LPCWSTR szUserSid,
} }
else if (strcmpW(INSTALLPROPERTY_PACKAGENAMEW, szProperty)==0) else if (strcmpW(INSTALLPROPERTY_PACKAGENAMEW, szProperty)==0)
{ {
DWORD size = lstrlenW(szValue)*sizeof(WCHAR); DWORD size = (lstrlenW(szValue) + 1) * sizeof(WCHAR);
rc = RegSetValueExW(sourcekey, INSTALLPROPERTY_PACKAGENAMEW, 0, rc = RegSetValueExW(sourcekey, INSTALLPROPERTY_PACKAGENAMEW, 0,
REG_SZ, (const BYTE *)szValue, size); REG_SZ, (const BYTE *)szValue, size);
if (rc != ERROR_SUCCESS) if (rc != ERROR_SUCCESS)