[PATCH 2/2] reg: Fail if multiple /v switches are passed in

Hugh McMaster hugh.mcmaster at outlook.com
Tue Mar 15 07:23:56 CDT 2016


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

diff --git a/programs/reg/reg.c b/programs/reg/reg.c
index f5786fc..ff18992 100644
--- a/programs/reg/reg.c
+++ b/programs/reg/reg.c
@@ -607,7 +607,7 @@ int wmain(int argc, WCHAR *argvW[])
     if (!lstrcmpiW(argvW[1], addW))
     {
         WCHAR *key_name, *value_name = NULL, *type = NULL, separator = '\0', *data = NULL;
-        BOOL value_empty = FALSE, force = FALSE;
+        BOOL value_empty = FALSE, force = FALSE, v_set = FALSE;
 
         if (argc < 3)
         {
@@ -626,11 +626,12 @@ int wmain(int argc, WCHAR *argvW[])
         {
             if (!lstrcmpiW(argvW[i], slashVW))
             {
-                if (!(value_name = argvW[++i]))
+                if (!(value_name = argvW[++i]) || v_set)
                 {
                     output_message(STRING_INVALID_CMDLINE);
                     return 1;
                 }
+                v_set = TRUE;
             }
             else if (!lstrcmpiW(argvW[i], slashVEW))
                 value_empty = TRUE;
@@ -664,7 +665,7 @@ int wmain(int argc, WCHAR *argvW[])
     else if (!lstrcmpiW(argvW[1], deleteW))
     {
         WCHAR *key_name, *value_name = NULL;
-        BOOL value_empty = FALSE, value_all = FALSE, force = FALSE;
+        BOOL value_empty = FALSE, value_all = FALSE, force = FALSE, v_set = FALSE;
 
         if (argc < 3)
         {
@@ -683,11 +684,12 @@ int wmain(int argc, WCHAR *argvW[])
         {
             if (!lstrcmpiW(argvW[i], slashVW))
             {
-                if (!(value_name = argvW[++i]))
+                if (!(value_name = argvW[++i]) || v_set)
                 {
                     output_message(STRING_INVALID_CMDLINE);
                     return 1;
                 }
+                v_set = TRUE;
             }
             else if (!lstrcmpiW(argvW[i], slashVEW))
                 value_empty = TRUE;
@@ -701,7 +703,7 @@ int wmain(int argc, WCHAR *argvW[])
     else if (!lstrcmpiW(argvW[1], queryW))
     {
         WCHAR *key_name, *value_name = NULL;
-        BOOL value_empty = FALSE, subkey = FALSE;
+        BOOL value_empty = FALSE, subkey = FALSE, v_set = FALSE;
 
         if (argc < 3)
         {
@@ -720,11 +722,12 @@ int wmain(int argc, WCHAR *argvW[])
         {
             if (!lstrcmpiW(argvW[i], slashVW))
             {
-                if (!(value_name = argvW[++i]))
+                if (!(value_name = argvW[++i]) || v_set)
                 {
                     output_message(STRING_INVALID_CMDLINE);
                     return 1;
                 }
+                v_set = TRUE;
             }
             else if (!lstrcmpiW(argvW[i], slashVEW))
                 value_empty = TRUE;
diff --git a/programs/reg/tests/reg.c b/programs/reg/tests/reg.c
index d1db5c4..927288d 100644
--- a/programs/reg/tests/reg.c
+++ b/programs/reg/tests/reg.c
@@ -532,6 +532,13 @@ static void test_v_flags(void)
 
     run_reg_exe("reg delete HKCU\\" KEY_BASE " /f /v", &r);
     ok(r == REG_EXIT_FAILURE, "got exit code %d, expected 1\n", r);
+
+    /* Multiple /v switches */
+    run_reg_exe("reg add HKCU\\" KEY_BASE " /v Wine /t REG_DWORD /d 0x1 /v Test /f", &r);
+    ok(r == REG_EXIT_FAILURE, "got exit code %d, expected 1\n", r);
+
+    run_reg_exe("reg delete HKCU\\" KEY_BASE " /v Wine /v Test /f", &r);
+    ok(r == REG_EXIT_FAILURE, "got exit code %d, expected 1\n", r);
 }
 
 START_TEST(reg)
-- 
1.9.1




More information about the wine-patches mailing list