From acb4e3f63a90ba0ae069fa41d930fddf09e32975 Mon Sep 17 00:00:00 2001 From: Hugh McMaster Date: Tue, 16 Feb 2016 17:12:09 +1100 Subject: [PATCH] reg: Explicitly use base 10 or base 16 with strtoulW. All Windows versions, except XP, parse the number 0123 as decimal. (XP parses 0123 as octal). Signed-off-by: Hugh McMaster Signed-off-by: Alexandre Julliard --- programs/reg/reg.c | 2 +- programs/reg/tests/reg.c | 3 +-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/programs/reg/reg.c b/programs/reg/reg.c index 3c98fc07b95..ef25fe50a34 100644 --- a/programs/reg/reg.c +++ b/programs/reg/reg.c @@ -243,7 +243,7 @@ static LPBYTE get_regdata(LPWSTR data, DWORD reg_type, WCHAR separator, DWORD *r { LPWSTR rest; DWORD val; - val = strtoulW(data, &rest, 0); + val = strtoulW(data, &rest, (data[1] == 'x') ? 16 : 10); if (*rest || data[0] == '-') { output_message(STRING_MISSING_INTEGER); break; diff --git a/programs/reg/tests/reg.c b/programs/reg/tests/reg.c index 007710143ba..1958be0bc31 100644 --- a/programs/reg/tests/reg.c +++ b/programs/reg/tests/reg.c @@ -272,8 +272,7 @@ static void test_add(void) ok(err == ERROR_SUCCESS, "RegQueryValueEx failed: got %d\n", err); ok(type == REG_DWORD, "got wrong type %d, expected %d\n", type, REG_DWORD); ok(size == sizeof(DWORD), "got wrong size %d, expected %d\n", size, (int)sizeof(DWORD)); - todo_wine ok(dword == 123 || broken(dword == 0123 /* WinXP */), - "got wrong data %d, expected %d\n", dword, 123); + ok(dword == 123 || broken(dword == 0123 /* WinXP */), "got wrong data %d, expected 123\n", dword); run_reg_exe("reg add HKCU\\" KEY_BASE " /v dword7 /t reg_dword /d 0xabcdefg /f", &r); ok(r == REG_EXIT_FAILURE, "got exit code %d, expected 1\n", r);