[PATCH 1/2] reg: Fail if the data for REG_MULTI_SZ contains two adjacent separators (v2)

Hugh McMaster hugh.mcmaster at outlook.com
Sun Feb 28 22:54:21 CST 2016


Signed-off-by: Hugh McMaster <hugh.mcmaster at outlook.com>
---
 programs/reg/reg.c       | 7 +++++++
 programs/reg/reg.h       | 1 +
 programs/reg/reg.rc      | 1 +
 programs/reg/tests/reg.c | 6 +++---
 4 files changed, 12 insertions(+), 3 deletions(-)

diff --git a/programs/reg/reg.c b/programs/reg/reg.c
index e66ba5a..bb1764e 100644
--- a/programs/reg/reg.c
+++ b/programs/reg/reg.c
@@ -299,6 +299,13 @@ static LPBYTE get_regdata(LPWSTR data, DWORD reg_type, WCHAR separator, DWORD *r
                     buffer[destindex] = 0;
                 else
                     buffer[destindex] = data[i];
+
+                if (destindex && !buffer[destindex - 1] && !buffer[destindex])
+                {
+                    HeapFree(GetProcessHeap(), 0, buffer);
+                    output_message(STRING_INVALID_STRING);
+                    return NULL;
+                }
             }
             buffer[destindex] = 0;
             if (destindex && buffer[destindex - 1])
diff --git a/programs/reg/reg.h b/programs/reg/reg.h
index 592fec6..679c72e 100644
--- a/programs/reg/reg.h
+++ b/programs/reg/reg.h
@@ -43,3 +43,4 @@
 #define STRING_DELETE_VALUE     120
 #define STRING_DELETE_VALUEALL  121
 #define STRING_DELETE_SUBKEY    122
+#define STRING_INVALID_STRING   123
diff --git a/programs/reg/reg.rc b/programs/reg/reg.rc
index 9b239d1..d153758 100644
--- a/programs/reg/reg.rc
+++ b/programs/reg/reg.rc
@@ -48,4 +48,5 @@ STRINGTABLE
     STRING_DELETE_VALUE, "Are you sure you want to delete the registry value '%1'?"
     STRING_DELETE_VALUEALL, "Are you sure you want to delete all registry values in '%1'?"
     STRING_DELETE_SUBKEY, "Are you sure you want to delete the registry key '%1'?"
+    STRING_INVALID_STRING, "reg: The option [/d] must be followed by a valid string\n"
 }
diff --git a/programs/reg/tests/reg.c b/programs/reg/tests/reg.c
index efb2839..b5ae277 100644
--- a/programs/reg/tests/reg.c
+++ b/programs/reg/tests/reg.c
@@ -353,9 +353,9 @@ static void test_add(void)
     run_reg_exe("reg add HKCU\\" KEY_BASE " /t REG_MULTI_SZ /v multi7 /s \"\" /d \"three#little#strings\" /f", &r);
     ok(r == REG_EXIT_FAILURE, "got exit code %u\n", r);
     run_reg_exe("reg add HKCU\\" KEY_BASE " /t REG_MULTI_SZ /v multi8 /s \"#\" /d \"##\" /f", &r);
-    todo_wine ok(r == REG_EXIT_FAILURE, "got exit code %u\n", r);
+    ok(r == REG_EXIT_FAILURE, "got exit code %u\n", r);
     run_reg_exe("reg add HKCU\\" KEY_BASE " /t REG_MULTI_SZ /v multi9 /s \"#\" /d \"two##strings\" /f", &r);
-    todo_wine ok(r == REG_EXIT_FAILURE, "got exit code %u\n", r);
+    ok(r == REG_EXIT_FAILURE, "got exit code %u\n", r);
     run_reg_exe("reg add HKCU\\" KEY_BASE " /t REG_MULTI_SZ /v multi10 /s \"#\" /d \"#a\" /f", &r);
     todo_wine ok(r == REG_EXIT_FAILURE, "got exit code %u\n", r);
 
@@ -378,7 +378,7 @@ static void test_add(void)
     verify_reg(hkey, "multi15", REG_MULTI_SZ, buffer, 3, 0);
 
     run_reg_exe("reg add HKCU\\" KEY_BASE " /t REG_MULTI_SZ /v multi16 /d \"two\\0\\0strings\" /f", &r);
-    todo_wine ok(r == REG_EXIT_FAILURE, "got exit code %u, expected 1\n", r);
+    ok(r == REG_EXIT_FAILURE, "got exit code %u, expected 1\n", r);
 
     run_reg_exe("reg add HKCU\\" KEY_BASE " /v multi17 /t REG_MULTI_SZ /s \"#\" /d \"#\" /f", &r);
     ok(r == REG_EXIT_SUCCESS, "got exit code %u, expected 0\n", r);
-- 
1.9.1




More information about the wine-patches mailing list