[PATCH 5/7] reg: Fail if the data value passed with REG_DWORD will cause an overflow
Hugh McMaster
hugh.mcmaster at outlook.com
Mon Feb 22 03:29:18 CST 2016
Signed-off-by: Hugh McMaster <hugh.mcmaster at outlook.com>
---
programs/reg/reg.c | 3 ++-
programs/reg/tests/reg.c | 2 +-
2 files changed, 3 insertions(+), 2 deletions(-)
diff --git a/programs/reg/reg.c b/programs/reg/reg.c
index 933341c..c6351a9 100644
--- a/programs/reg/reg.c
+++ b/programs/reg/reg.c
@@ -19,6 +19,7 @@
#include <windows.h>
#include <wine/unicode.h>
#include <wine/debug.h>
+#include <errno.h>
#include "reg.h"
#define ARRAY_SIZE(A) (sizeof(A)/sizeof(*A))
@@ -244,7 +245,7 @@ static LPBYTE get_regdata(LPWSTR data, DWORD reg_type, WCHAR separator, DWORD *r
LPWSTR rest;
DWORD val;
val = strtoulW(data, &rest, (tolowerW(data[1]) == 'x') ? 16 : 10);
- if (*rest || data[0] == '-') {
+ if (*rest || data[0] == '-' || (val == ~0u && errno == ERANGE)) {
output_message(STRING_MISSING_INTEGER);
break;
}
diff --git a/programs/reg/tests/reg.c b/programs/reg/tests/reg.c
index bb54e2a..d660a07 100644
--- a/programs/reg/tests/reg.c
+++ b/programs/reg/tests/reg.c
@@ -288,7 +288,7 @@ static void test_add(void)
ok(r == REG_EXIT_FAILURE || broken(r == REG_EXIT_SUCCESS /* WinXP */), "got exit code %u\n", r);
run_reg_exe("reg add HKCU\\" KEY_BASE " /v dword8 /t REG_dword /d 0x01ffffffff /f", &r);
- todo_wine ok(r == REG_EXIT_FAILURE || broken(r == REG_EXIT_SUCCESS /* WinXP */), "got exit code %d\n", r);
+ ok(r == REG_EXIT_FAILURE || broken(r == REG_EXIT_SUCCESS /* WinXP */), "got exit code %d\n", r);
run_reg_exe("reg add HKCU\\" KEY_BASE " /v dword12 /t REG_DWORD /d 0xffffffff /f", &r);
ok(r == REG_EXIT_SUCCESS, "got exit code %d, expected 0\n", r);
--
1.9.1
More information about the wine-patches
mailing list