From 06bf8ea291576ab03be01f11bb0c7466336ff1ea Mon Sep 17 00:00:00 2001 From: Alexandre Julliard Date: Tue, 22 Apr 2008 17:05:05 +0200 Subject: [PATCH] msi: Avoid creating zero-length string values in the registry. --- dlls/msi/action.c | 6 ++++-- dlls/msi/registry.c | 7 +++++-- dlls/msi/source.c | 2 +- 3 files changed, 10 insertions(+), 5 deletions(-) diff --git a/dlls/msi/action.c b/dlls/msi/action.c index 11a4ad76826..44fae9d95cc 100644 --- a/dlls/msi/action.c +++ b/dlls/msi/action.c @@ -2426,7 +2426,7 @@ static UINT ITERATE_WriteRegistryValues(MSIRECORD *row, LPVOID param) { static const WCHAR szEmpty[] = {0}; value_data = (LPSTR)strdupW(szEmpty); - size = 0; + size = sizeof(szEmpty); type = REG_SZ; } @@ -3772,8 +3772,10 @@ static UINT ACTION_PublishFeatures(MSIPACKAGE *package) size = strlenW(feature->Feature_Parent)*sizeof(WCHAR); if (!absent) { + static const WCHAR emptyW[] = {0}; + size += sizeof(WCHAR); RegSetValueExW(hukey,feature->Feature,0,REG_SZ, - (LPBYTE)feature->Feature_Parent,size); + (LPBYTE)(feature->Feature_Parent ? feature->Feature_Parent : emptyW),size); } else { diff --git a/dlls/msi/registry.c b/dlls/msi/registry.c index 74f84f7141d..b95d5bb48cc 100644 --- a/dlls/msi/registry.c +++ b/dlls/msi/registry.c @@ -381,7 +381,7 @@ DWORD msi_version_str_to_dword(LPCWSTR p) 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); sprintfW(str, fmt, (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 ) { - 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 ); } diff --git a/dlls/msi/source.c b/dlls/msi/source.c index 0f9e0872312..4c3811661fd 100644 --- a/dlls/msi/source.c +++ b/dlls/msi/source.c @@ -822,7 +822,7 @@ UINT WINAPI MsiSourceListSetInfoW( LPCWSTR szProduct, LPCWSTR szUserSid, } 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, REG_SZ, (const BYTE *)szValue, size); if (rc != ERROR_SUCCESS)