[PATCH 1/3] reg/tests: Try deleting strings containing escaped null characters
--- programs/reg/tests/delete.c | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/programs/reg/tests/delete.c b/programs/reg/tests/delete.c index fff3c5348b8..ee2257d42c5 100644 --- a/programs/reg/tests/delete.c +++ b/programs/reg/tests/delete.c @@ -100,6 +100,22 @@ static void test_delete(void) ok(r == REG_EXIT_SUCCESS, "got exit code %d, expected 0\n", r); verify_reg_nonexist(hkey, "\\foo\\bar"); + add_value(hkey, "string\\01", REG_SZ, "Value", 6); + add_value(hkey, "string2", REG_SZ, "foo\\0bar", 9); + add_value(hkey, "\\0", REG_SZ, "Value", 6); + + run_reg_exe("reg delete HKCU\\" KEY_BASE " /v string\\01 /f", &r); + ok(r == REG_EXIT_SUCCESS, "got exit code %d, expected 0\n", r); + verify_reg_nonexist(hkey, "string\\01"); + + run_reg_exe("reg delete HKCU\\" KEY_BASE " /v string2 /f", &r); + ok(r == REG_EXIT_SUCCESS, "got exit code %d, expected 0\n", r); + verify_reg_nonexist(hkey, "string2"); + + run_reg_exe("reg delete HKCU\\" KEY_BASE " /v \\0 /f", &r); + ok(r == REG_EXIT_SUCCESS, "got exit code %d, expected 0\n", r); + verify_reg_nonexist(hkey, "\\0"); + close_key(hkey); run_reg_exe("reg delete HKCU\\" KEY_BASE " /f", &r); -- 2.30.1
--- The original behaviour of Wine69* is tested more thoroughly elsewhere. It is also missing closing quotes on each line, which is also tested elsewhere. programs/reg/tests/import.c | 50 ++++++++++++++++++------------------- 1 file changed, 25 insertions(+), 25 deletions(-) diff --git a/programs/reg/tests/import.c b/programs/reg/tests/import.c index 9b7a90ac99c..f8e7e4b7acb 100644 --- a/programs/reg/tests/import.c +++ b/programs/reg/tests/import.c @@ -1574,22 +1574,22 @@ static void test_import(void) verify_reg(hkey, "Wine68h", REG_BINARY, NULL, 0, 0); verify_reg(hkey, "Wine68i", REG_NONE, NULL, 0, 0); - /* Test with embedded null characters */ + /* Test with escaped null characters */ test_import_str("REGEDIT4\n\n" "[HKEY_CURRENT_USER\\" KEY_BASE "]\n" - "\"Wine69a\"=\"\\0\n" - "\"Wine69b\"=\"\\0\\0\n" - "\"Wine69c\"=\"Value1\\0\n" - "\"Wine69d\"=\"Value2\\0\\0\\0\\0\n" - "\"Wine69e\"=\"Value3\\0Value4\n" - "\"Wine69f\"=\"\\0Value5\n\n", &r); + "\"Wine69a\"=\"\\\\0\"\n" + "\"Wine69b\"=\"\\\\0\\\\0\"\n" + "\"Wine69c\"=\"Value1\\\\0\"\n" + "\"Wine69d\"=\"Value2\\\\0\\\\0\\\\0\\\\0\"\n" + "\"Wine69e\"=\"Value3\\\\0Value4\"\n" + "\"Wine69f\"=\"\\\\0Value5\"\n\n", &r); ok(r == REG_EXIT_SUCCESS, "got exit code %d, expected 0\n", r); - verify_reg_nonexist(hkey, "Wine69a"); - verify_reg_nonexist(hkey, "Wine69b"); - verify_reg_nonexist(hkey, "Wine69c"); - verify_reg_nonexist(hkey, "Wine69d"); - verify_reg_nonexist(hkey, "Wine69e"); - verify_reg_nonexist(hkey, "Wine69f"); + verify_reg(hkey, "Wine69a", REG_SZ, "\\0", 3, 0); + verify_reg(hkey, "Wine69b", REG_SZ, "\\0\\0", 5, 0); + verify_reg(hkey, "Wine69c", REG_SZ, "Value1\\0", 9, 0); + verify_reg(hkey, "Wine69d", REG_SZ, "Value2\\0\\0\\0\\0", 15, 0); + verify_reg(hkey, "Wine69e", REG_SZ, "Value3\\0Value4", 15, 0); + verify_reg(hkey, "Wine69f", REG_SZ, "\\0Value5", 9, 0); test_import_str("REGEDIT4\n\n" "[HKEY_CURRENT_USER\\" KEY_BASE "]\n" @@ -3126,19 +3126,19 @@ static void test_unicode_import(void) /* Test with embedded null characters */ test_import_wstr("\xef\xbb\xbfWindows Registry Editor Version 5.00\n\n" "[HKEY_CURRENT_USER\\" KEY_BASE "]\n" - "\"Wine69a\"=\"\\0\n" - "\"Wine69b\"=\"\\0\\0\n" - "\"Wine69c\"=\"Value1\\0\n" - "\"Wine69d\"=\"Value2\\0\\0\\0\\0\n" - "\"Wine69e\"=\"Value3\\0Value4\n" - "\"Wine69f\"=\"\\0Value5\n\n", &r); + "\"Wine69a\"=\"\\\\0\"\n" + "\"Wine69b\"=\"\\\\0\\\\0\"\n" + "\"Wine69c\"=\"Value1\\\\0\"\n" + "\"Wine69d\"=\"Value2\\\\0\\\\0\\\\0\\\\0\"\n" + "\"Wine69e\"=\"Value3\\\\0Value4\"\n" + "\"Wine69f\"=\"\\\\0Value5\"\n\n", &r); ok(r == REG_EXIT_SUCCESS, "got exit code %d, expected 0\n", r); - verify_reg_nonexist(hkey, "Wine69a"); - verify_reg_nonexist(hkey, "Wine69b"); - verify_reg_nonexist(hkey, "Wine69c"); - verify_reg_nonexist(hkey, "Wine69d"); - verify_reg_nonexist(hkey, "Wine69e"); - verify_reg_nonexist(hkey, "Wine69f"); + verify_reg(hkey, "Wine69a", REG_SZ, "\\0", 3, 0); + verify_reg(hkey, "Wine69b", REG_SZ, "\\0\\0", 5, 0); + verify_reg(hkey, "Wine69c", REG_SZ, "Value1\\0", 9, 0); + verify_reg(hkey, "Wine69d", REG_SZ, "Value2\\0\\0\\0\\0", 15, 0); + verify_reg(hkey, "Wine69e", REG_SZ, "Value3\\0Value4", 15, 0); + verify_reg(hkey, "Wine69f", REG_SZ, "\\0Value5", 9, 0); test_import_wstr("\xef\xbb\xbfWindows Registry Editor Version 5.00\n\n" "[HKEY_CURRENT_USER\\" KEY_BASE "]\n" -- 2.30.1
--- programs/reg/tests/export.c | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/programs/reg/tests/export.c b/programs/reg/tests/export.c index 32c99e36376..2c7ba88fb59 100644 --- a/programs/reg/tests/export.c +++ b/programs/reg/tests/export.c @@ -168,6 +168,16 @@ static void test_export(void) "\"\\\\foo\\\\bar\"=\"\"\r\n\r\n" "[HKEY_CURRENT_USER\\" KEY_BASE "\\https://winehq.org]\r\n\r\n"; + const char *escaped_null_test = + "\xef\xbb\xbfWindows Registry Editor Version 5.00\r\n\r\n" + "[HKEY_CURRENT_USER\\" KEY_BASE "]\r\n" + "\"Wine5a\"=\"\\\\0\"\r\n" + "\"Wine5b\"=\"\\\\0\\\\0\"\r\n" + "\"Wine5c\"=\"Value1\\\\0\"\r\n" + "\"Wine5d\"=\"Value2\\\\0\\\\0\\\\0\\\\0\"\r\n" + "\"Wine5e\"=\"Value3\\\\0Value4\"\r\n" + "\"Wine5f\"=\"\\\\0Value5\"\r\n\r\n"; + delete_tree(HKEY_CURRENT_USER, KEY_BASE); verify_key_nonexist(HKEY_CURRENT_USER, KEY_BASE); @@ -402,6 +412,21 @@ static void test_export(void) ok(r == REG_EXIT_SUCCESS, "got exit code %d, expected 0\n", r); ok(compare_export("file.reg", slashes_test, TODO_REG_COMPARE), "compare_export() failed\n"); delete_tree(HKEY_CURRENT_USER, KEY_BASE); + + /* Test escaped null characters */ + add_key(HKEY_CURRENT_USER, KEY_BASE, &hkey); + add_value(hkey, "Wine5a", REG_SZ, "\\0", 3); + add_value(hkey, "Wine5b", REG_SZ, "\\0\\0", 5); + add_value(hkey, "Wine5c", REG_SZ, "Value1\\0", 9); + add_value(hkey, "Wine5d", REG_SZ, "Value2\\0\\0\\0\\0", 15); + add_value(hkey, "Wine5e", REG_SZ, "Value3\\0Value4", 15); + add_value(hkey, "Wine5f", REG_SZ, "\\0Value5", 9); + close_key(hkey); + + run_reg_exe("reg export HKEY_CURRENT_USER\\" KEY_BASE " file.reg /y", &r); + ok(r == REG_EXIT_SUCCESS, "got exit code %d, expected 0\n", r); + ok(compare_export("file.reg", escaped_null_test, 0), "compare_export() failed\n"); + delete_tree(HKEY_CURRENT_USER, KEY_BASE); } START_TEST(export) -- 2.30.1
participants (1)
-
Hugh McMaster