Hugh McMaster : regedit: Pass correct data size when adding a new value via the GUI.

Alexandre Julliard julliard at winehq.org
Wed Jun 29 16:25:53 CDT 2022


Module: wine
Branch: master
Commit: 9c30f3d97ad2dc8b65409d7f3e70d3e2a159571c
URL:    https://source.winehq.org/git/wine.git/?a=commit;h=9c30f3d97ad2dc8b65409d7f3e70d3e2a159571c

Author: Hugh McMaster <hugh.mcmaster at outlook.com>
Date:   Wed Jun 29 15:49:24 2022 +1000

regedit: Pass correct data size when adding a new value via the GUI.

This bug was exposed by 3b1faf59f60c2e5d91321fd8998dd81d90a13e11

Signed-off-by: Hugh McMaster <hugh.mcmaster at outlook.com>

---

 programs/regedit/edit.c | 26 +++++++++++++++++++++++---
 1 file changed, 23 insertions(+), 3 deletions(-)

diff --git a/programs/regedit/edit.c b/programs/regedit/edit.c
index c19ef1506fa..47ce233039e 100644
--- a/programs/regedit/edit.c
+++ b/programs/regedit/edit.c
@@ -443,6 +443,7 @@ BOOL CreateValue(HWND hwnd, HKEY hKeyRoot, LPCWSTR keyPath, DWORD valueType, LPW
     LONG lRet = ERROR_SUCCESS;
     WCHAR newValue[256];
     UINT64 value = 0;
+    DWORD size_bytes;
     BOOL result = FALSE;
     int valueNum, index;
     HKEY hKey;
@@ -466,15 +467,34 @@ BOOL CreateValue(HWND hwnd, HKEY hKeyRoot, LPCWSTR keyPath, DWORD valueType, LPW
         error_code_messagebox(hwnd, IDS_CREATE_VALUE_FAILED);
 	goto done;
     }
-   
-    lRet = RegSetValueExW(hKey, valueName, 0, valueType, (BYTE *)&value, sizeof(value));
+
+    switch (valueType)
+    {
+        case REG_DWORD:
+        case REG_DWORD_BIG_ENDIAN:
+            size_bytes = sizeof(DWORD);
+            break;
+        case REG_QWORD:
+            size_bytes = sizeof(UINT64);
+            break;
+        case REG_BINARY:
+            size_bytes = 0;
+            break;
+        case REG_MULTI_SZ:
+            size_bytes = 2 * sizeof(WCHAR);
+            break;
+        default: /* REG_NONE, REG_SZ, REG_EXPAND_SZ */
+            size_bytes = sizeof(WCHAR);
+    }
+
+    lRet = RegSetValueExW(hKey, valueName, 0, valueType, (BYTE *)&value, size_bytes);
     if (lRet) {
         error_code_messagebox(hwnd, IDS_CREATE_VALUE_FAILED);
 	goto done;
     }
 
     /* Add the new item to the listview */
-    index = AddEntryToList(g_pChildWnd->hListWnd, valueName, valueType, (BYTE *)&value, sizeof(value), -1);
+    index = AddEntryToList(g_pChildWnd->hListWnd, valueName, valueType, (BYTE *)&value, size_bytes, -1);
     item.state = LVIS_FOCUSED | LVIS_SELECTED;
     item.stateMask = LVIS_FOCUSED | LVIS_SELECTED;
     SendMessageW(g_pChildWnd->hListWnd, LVM_SETITEMSTATE, index, (LPARAM)&item);




More information about the wine-cvs mailing list