[PATCH 3/3] reg: Fail if the data for REG_MULTI_SZ contains two adjacent separators

Hugh McMaster hugh.mcmaster at outlook.com
Thu Feb 25 02:54:10 CST 2016


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

diff --git a/programs/reg/reg.c b/programs/reg/reg.c
index e66ba5a..009f035 100644
--- a/programs/reg/reg.c
+++ b/programs/reg/reg.c
@@ -294,9 +294,15 @@ static LPBYTE get_regdata(LPWSTR data, DWORD reg_type, WCHAR separator, DWORD *r
                 {
                     buffer[destindex] = 0;
                     i++;
+                    if (data[i + 1] == '\\' && data[i + 2] == '0')
+                        goto error_multi_sz;
                 }
                 else if (data[i] == separator)
+                {
                     buffer[destindex] = 0;
+                    if (data[i + 1] == separator)
+                        goto error_multi_sz;
+                }
                 else
                     buffer[destindex] = data[i];
             }
@@ -305,6 +311,10 @@ static LPBYTE get_regdata(LPWSTR data, DWORD reg_type, WCHAR separator, DWORD *r
                 buffer[++destindex] = 0;
             *reg_count = (destindex + 1) * sizeof(WCHAR);
             return (BYTE *)buffer;
+            error_multi_sz:
+            if (buffer) HeapFree(GetProcessHeap(), 0, buffer);
+            output_message(STRING_INVALID_STRING);
+            break;
         }
         default:
             output_message(STRING_UNHANDLED_TYPE, reg_type, data);
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