[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