Hugh McMaster : regedit: Limit REG_DWORD/REG_QWORD input length by value type and format.
Alexandre Julliard
julliard at winehq.org
Thu Jul 28 16:01:11 CDT 2022
Module: wine
Branch: master
Commit: b8b87e55a6afbe23597d51308e89d3bd9f9f4c9a
URL: https://gitlab.winehq.org/wine/wine/-/commit/b8b87e55a6afbe23597d51308e89d3bd9f9f4c9a
Author: Hugh McMaster <hugh.mcmaster at outlook.com>
Date: Thu Jul 28 22:19:14 2022 +1000
regedit: Limit REG_DWORD/REG_QWORD input length by value type and format.
---
programs/regedit/edit.c | 19 +++++++++++++++----
1 file changed, 15 insertions(+), 4 deletions(-)
diff --git a/programs/regedit/edit.c b/programs/regedit/edit.c
index 181672b4da6..66d3a27dc68 100644
--- a/programs/regedit/edit.c
+++ b/programs/regedit/edit.c
@@ -184,7 +184,15 @@ static INT_PTR CALLBACK modify_string_dlgproc(HWND hwndDlg, UINT msg, WPARAM wpa
return FALSE;
}
-static void change_dword_base(HWND hwndDlg, BOOL toHex)
+static void set_dword_edit_limit(HWND hwndDlg, DWORD type)
+{
+ if (isDecimal)
+ SendDlgItemMessageW(hwndDlg, IDC_VALUE_DATA, EM_SETLIMITTEXT, type == REG_DWORD ? 10 : 20, 0);
+ else
+ SendDlgItemMessageW(hwndDlg, IDC_VALUE_DATA, EM_SETLIMITTEXT, type == REG_DWORD ? 8 : 16, 0);
+}
+
+static void change_dword_base(HWND hwndDlg, BOOL toHex, DWORD type)
{
WCHAR buf[64];
unsigned int len;
@@ -204,11 +212,13 @@ static void change_dword_base(HWND hwndDlg, BOOL toHex)
}
isDecimal = !toHex;
+
+ set_dword_edit_limit(hwndDlg, type);
}
static INT_PTR CALLBACK modify_dword_dlgproc(HWND hwndDlg, UINT msg, WPARAM wparam, LPARAM lparam)
{
- struct edit_params *params;
+ static struct edit_params *params;
WCHAR buf[64];
int ret = 0;
@@ -223,15 +233,16 @@ static INT_PTR CALLBACK modify_dword_dlgproc(HWND hwndDlg, UINT msg, WPARAM wpar
isDecimal = FALSE;
if (params->type == REG_QWORD && LoadStringW(GetModuleHandleW(0), IDS_EDIT_QWORD, buf, ARRAY_SIZE(buf)))
SetWindowTextW(hwndDlg, buf);
+ set_dword_edit_limit(hwndDlg, params->type);
return TRUE;
case WM_COMMAND:
switch (LOWORD(wparam))
{
case IDC_DWORD_HEX:
- change_dword_base(hwndDlg, TRUE);
+ change_dword_base(hwndDlg, TRUE, params->type);
break;
case IDC_DWORD_DEC:
- change_dword_base(hwndDlg, FALSE);
+ change_dword_base(hwndDlg, FALSE, params->type);
break;
case IDOK:
params = (struct edit_params *)GetWindowLongPtrW(hwndDlg, DWLP_USER);
More information about the wine-cvs
mailing list