[PATCH 3/5] reg: Use strtoulW during conversion so we can set any value in the DWORD range

Hugh McMaster hugh.mcmaster at outlook.com
Tue Feb 16 00:12:07 CST 2016


Currently, if we pass strtolW a value above INT_MAX, e.g. 0xdeadbeef, the function
returns INT_MAX (0x7fffffff) due to overflow. Although this is correct, the behaviour breaks
reg.exe. So we need to use strtoulW instead.

Signed-off-by: Hugh McMaster <hugh.mcmaster at outlook.com>
---
 programs/reg/reg.c       | 2 +-
 programs/reg/tests/reg.c | 6 ++----
 2 files changed, 3 insertions(+), 5 deletions(-)

diff --git a/programs/reg/reg.c b/programs/reg/reg.c
index 7a66753..f676e77 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 = strtolW(data, &rest, 0);
+            val = strtoulW(data, &rest, 0);
             if (*rest) {
                 output_message(STRING_MISSING_INTEGER);
                 break;
diff --git a/programs/reg/tests/reg.c b/programs/reg/tests/reg.c
index bf00c0b..fe68274 100644
--- a/programs/reg/tests/reg.c
+++ b/programs/reg/tests/reg.c
@@ -287,8 +287,7 @@ static void test_add(void)
     run_reg_exe("reg add HKCU\\" KEY_BASE " /v dword8 /t REG_dword /d 0xdeadbeef /f", &r);
     ok(r == REG_EXIT_SUCCESS, "got exit code %d, expected 0\n", r);
     dword = 0xdeadbeef;
-    verify_reg(hkey, "dword8", REG_DWORD, &dword, sizeof(dword),
-               (sizeof(long) > sizeof(DWORD)) ? 0 : TODO_REG_DATA);
+    verify_reg(hkey, "dword8", REG_DWORD, &dword, sizeof(dword), 0);
 
     run_reg_exe("reg add HKCU\\" KEY_BASE " /t REG_DWORD /v dword9 /f /d -1", &r);
     todo_wine ok(r == REG_EXIT_FAILURE || broken(r == REG_EXIT_SUCCESS /* WinXP */), "got exit code %u\n", r);
@@ -301,8 +300,7 @@ static void test_add(void)
     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);
     dword = ~0u;
-    verify_reg(hkey, "dword12", REG_DWORD, &dword, sizeof(dword),
-               (sizeof(long) > sizeof(DWORD)) ? 0 : TODO_REG_DATA);
+    verify_reg(hkey, "dword12", REG_DWORD, &dword, sizeof(dword), 0);
 
     run_reg_exe("reg add HKCU\\" KEY_BASE " /v dword13 /t REG_DWORD /d 00x123 /f", &r);
     ok(r == REG_EXIT_FAILURE, "got exit code %d, expected 1\n", r);
-- 
1.9.1




More information about the wine-patches mailing list