Module: wine Branch: master Commit: 3c7b7ece37b83770d9bbef21d9c83712d045cd6c URL: http://source.winehq.org/git/wine.git/?a=commit;h=3c7b7ece37b83770d9bbef21d9...
Author: Hugh McMaster hugh.mcmaster@outlook.com Date: Mon Feb 22 20:29:18 2016 +1100
reg: Fail if the data value passed with REG_DWORD will cause an overflow.
Signed-off-by: Hugh McMaster hugh.mcmaster@outlook.com Signed-off-by: Alexandre Julliard julliard@winehq.org
---
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);