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>
This commit is contained in:
parent
a9fb9ac657
commit
3c7b7ece37
|
@ -19,6 +19,7 @@
|
||||||
#include <windows.h>
|
#include <windows.h>
|
||||||
#include <wine/unicode.h>
|
#include <wine/unicode.h>
|
||||||
#include <wine/debug.h>
|
#include <wine/debug.h>
|
||||||
|
#include <errno.h>
|
||||||
#include "reg.h"
|
#include "reg.h"
|
||||||
|
|
||||||
#define ARRAY_SIZE(A) (sizeof(A)/sizeof(*A))
|
#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;
|
LPWSTR rest;
|
||||||
DWORD val;
|
DWORD val;
|
||||||
val = strtoulW(data, &rest, (tolowerW(data[1]) == 'x') ? 16 : 10);
|
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);
|
output_message(STRING_MISSING_INTEGER);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
|
@ -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);
|
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);
|
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);
|
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);
|
ok(r == REG_EXIT_SUCCESS, "got exit code %d, expected 0\n", r);
|
||||||
|
|
Loading…
Reference in New Issue