[PATCH 5/5] regedit: Improve the parsing of multiline hex data during the registry import operation
Hugh McMaster
hugh.mcmaster at outlook.com
Fri Jun 30 08:42:55 CDT 2017
Signed-off-by: Hugh McMaster <hugh.mcmaster at outlook.com>
---
programs/regedit/regproc.c | 143 +++++++++++++++++++++++++++++----------
programs/regedit/tests/regedit.c | 125 +++++++++++++++++-----------------
2 files changed, 171 insertions(+), 97 deletions(-)
diff --git a/programs/regedit/regproc.c b/programs/regedit/regproc.c
index e5a4f741e8..512ddb4696 100644
--- a/programs/regedit/regproc.c
+++ b/programs/regedit/regproc.c
@@ -147,6 +147,8 @@ enum parser_state
STRING_DATA, /* parsing REG_SZ data */
DWORD_DATA, /* parsing DWORD data */
HEX_DATA, /* parsing REG_BINARY, REG_NONE, REG_EXPAND_SZ or REG_MULTI_SZ data */
+ EOL_BACKSLASH, /* preparing to parse multiple lines of hex data */
+ HEX_MULTILINE, /* parsing multiple lines of hex data */
UNKNOWN_DATA, /* parsing an unhandled or invalid data type */
SET_VALUE, /* adding a value to the registry */
NB_PARSER_STATES
@@ -165,6 +167,7 @@ struct parser
DWORD data_type; /* data type */
void *data; /* value data */
DWORD data_size; /* size of the data (in bytes) */
+ BOOL backslash; /* TRUE if the current line contains a backslash */
enum parser_state state; /* current parser state */
};
@@ -184,6 +187,8 @@ static WCHAR *data_type_state(struct parser *parser, WCHAR *pos);
static WCHAR *string_data_state(struct parser *parser, WCHAR *pos);
static WCHAR *dword_data_state(struct parser *parser, WCHAR *pos);
static WCHAR *hex_data_state(struct parser *parser, WCHAR *pos);
+static WCHAR *eol_backslash_state(struct parser *parser, WCHAR *pos);
+static WCHAR *hex_multiline_state(struct parser *parser, WCHAR *pos);
static WCHAR *unknown_data_state(struct parser *parser, WCHAR *pos);
static WCHAR *set_value_state(struct parser *parser, WCHAR *pos);
@@ -202,6 +207,8 @@ static const parser_state_func parser_funcs[NB_PARSER_STATES] =
string_data_state, /* STRING_DATA */
dword_data_state, /* DWORD_DATA */
hex_data_state, /* HEX_DATA */
+ eol_backslash_state, /* EOL_BACKSLASH */
+ hex_multiline_state, /* HEX_MULTILINE */
unknown_data_state, /* UNKNOWN_DATA */
set_value_state, /* SET_VALUE */
};
@@ -214,6 +221,19 @@ static inline enum parser_state set_state(struct parser *parser, enum parser_sta
return ret;
}
+static void *resize_buffer(void *buf, size_t count)
+{
+ void *new_buf;
+
+ if (buf)
+ new_buf = HeapReAlloc(GetProcessHeap(), 0, buf, count);
+ else
+ new_buf = HeapAlloc(GetProcessHeap(), 0, count);
+
+ CHECK_ENOUGH_MEMORY(new_buf);
+ return new_buf;
+}
+
/******************************************************************************
* Converts a hex representation of a DWORD into a DWORD.
*/
@@ -246,37 +266,61 @@ error:
}
/******************************************************************************
- * Converts comma-separated hex data into a binary string.
+ * Converts comma-separated hex data into a binary string and modifies
+ * the input parameter to skip the concatenating backslash, if found.
+ *
+ * Returns TRUE or FALSE to indicate whether parsing was successful.
*/
-static BYTE *convert_hex_csv_to_hex(WCHAR *str, DWORD *size)
+static BOOL convert_hex_csv_to_hex(struct parser *parser, WCHAR **str)
{
+ size_t size;
+ BYTE *d;
WCHAR *s;
- BYTE *d, *data;
+
+ parser->backslash = FALSE;
/* The worst case is 1 digit + 1 comma per byte */
- *size=(lstrlenW(str)+1)/2;
- data=HeapAlloc(GetProcessHeap(), 0, *size);
- CHECK_ENOUGH_MEMORY(data);
-
- s = str;
- d = data;
- *size=0;
- while (*s != '\0') {
- UINT wc;
+ size = ((lstrlenW(*str) + 1) / 2) + parser->data_size;
+ parser->data = resize_buffer(parser->data, size);
+
+ s = *str;
+ d = (BYTE *)parser->data + parser->data_size;
+
+ while (*s)
+ {
WCHAR *end;
+ unsigned long wc;
+
+ wc = strtoulW(s, &end, 16);
+ if (wc > 0xff) return FALSE;
+
+ if (s == end && wc == 0)
+ {
+ while (*end == ' ' || *end == '\t') end++;
+ if (*end == '\\')
+ {
+ parser->backslash = TRUE;
+ *str = end + 1;
+ return TRUE;
+ }
+ return FALSE;
+ }
- wc = strtoulW(s,&end,16);
- if (end == s || wc > 0xff || (*end && *end != ',')) {
- HeapFree(GetProcessHeap(), 0, data);
- return NULL;
+ *d++ = wc;
+ parser->data_size++;
+
+ if (*end && *end != ',')
+ {
+ while (*end == ' ' || *end == '\t') end++;
+ if (*end && *end != ';') return FALSE;
+ return TRUE;
}
- *d++ =(BYTE)wc;
- (*size)++;
+
if (*end) end++;
s = end;
}
- return data;
+ return TRUE;
}
/******************************************************************************
@@ -790,9 +834,15 @@ static WCHAR *hex_data_state(struct parser *parser, WCHAR *pos)
{
WCHAR *line = pos;
- if (!(parser->data = convert_hex_csv_to_hex(line, &parser->data_size)))
+ if (!convert_hex_csv_to_hex(parser, &line))
goto invalid;
+ if (parser->backslash)
+ {
+ set_state(parser, EOL_BACKSLASH);
+ return line;
+ }
+
if (!parser->is_unicode && (parser->data_type == REG_EXPAND_SZ || parser->data_type == REG_MULTI_SZ))
{
void *tmp = parser->data;
@@ -814,6 +864,44 @@ invalid:
return line;
}
+/* handler for parser EOL_BACKSLASH state */
+static WCHAR *eol_backslash_state(struct parser *parser, WCHAR *pos)
+{
+ WCHAR *p = pos;
+
+ while (*p == ' ' || *p == '\t') p++;
+ if (*p && *p != ';') goto invalid;
+
+ set_state(parser, HEX_MULTILINE);
+ return pos;
+
+invalid:
+ HeapFree(GetProcessHeap(), 0, parser->data);
+ parser->data = NULL;
+ parser->data_size = 0;
+
+ set_state(parser, LINE_START);
+ return p;
+}
+
+/* handler for parser HEX_MULTILINE state */
+static WCHAR *hex_multiline_state(struct parser *parser, WCHAR *pos)
+{
+ WCHAR *line;
+
+ if (!(line = get_line(parser->file)))
+ {
+ set_state(parser, SET_VALUE);
+ return pos;
+ }
+
+ while (*line == ' ' || *line == '\t') line++;
+ if (*line == ';') return line;
+
+ set_state(parser, HEX_DATA);
+ return line;
+}
+
/* handler for parser UNKNOWN_DATA state */
static WCHAR *unknown_data_state(struct parser *parser, WCHAR *pos)
{
@@ -893,13 +981,6 @@ static WCHAR *get_lineA(FILE *fp)
next = p + 1;
if (*p == '\r' && *(p + 1) == '\n') next++;
*p = 0;
- if (p > buf && *(p - 1) == '\\')
- {
- while (*next == ' ' || *next == '\t') next++;
- memmove(p - 1, next, strlen(next) + 1);
- next = line;
- continue;
- }
if (*line == ';' || *line == '#')
{
line = next;
@@ -963,13 +1044,6 @@ static WCHAR *get_lineW(FILE *fp)
next = p + 1;
if (*p == '\r' && *(p + 1) == '\n') next++;
*p = 0;
- if (p > buf && *(p - 1) == '\\')
- {
- while (*next == ' ' || *next == '\t') next++;
- memmove(p - 1, next, (strlenW(next) + 1) * sizeof(WCHAR));
- next = line;
- continue;
- }
if (*line == ';' || *line == '#')
{
line = next;
@@ -1473,6 +1547,7 @@ BOOL import_registry_file(FILE *reg_file)
parser.data_type = 0;
parser.data = NULL;
parser.data_size = 0;
+ parser.backslash = FALSE;
parser.state = HEADER;
pos = parser.two_wchars;
diff --git a/programs/regedit/tests/regedit.c b/programs/regedit/tests/regedit.c
index 3b5a7f51dd..e85e2a7a7e 100644
--- a/programs/regedit/tests/regedit.c
+++ b/programs/regedit/tests/regedit.c
@@ -332,7 +332,7 @@ static void test_basic_import(void)
verify_reg(hkey, "Wine9a", REG_EXPAND_SZ, "Line", 5, 0);
verify_reg(hkey, "Wine9b", REG_SZ, "Value 1", 8, 0);
verify_reg_nonexist(hkey, "Wine9c");
- todo_wine verify_reg(hkey, "Wine9d", REG_SZ, "Value 2", 8, 0);
+ verify_reg(hkey, "Wine9d", REG_SZ, "Value 2", 8, 0);
verify_reg_nonexist(hkey, "Wine9e");
verify_reg_nonexist(hkey, "Wine9f");
verify_reg(hkey, "Wine9g", REG_SZ, "Value 4", 8, 0);
@@ -362,8 +362,8 @@ static void test_basic_import(void)
" 65,00,00,00\n");
verify_reg(hkey, "Wine10a", REG_NONE, "V\0a\0l\0u\0e\0\0", 12, 0);
verify_reg(hkey, "Wine10b", REG_NONE, "V\0a\0l\0u\0e\0\0", 12, 0);
- todo_wine verify_reg(hkey, "Wine10c", REG_NONE, "V\0a\0l\0u\0e\0\0", 12, 0);
- todo_wine verify_reg(hkey, "Wine10d", REG_NONE, "V\0a\0l\0u", 8, 0);
+ verify_reg(hkey, "Wine10c", REG_NONE, "V\0a\0l\0u\0e\0\0", 12, 0);
+ verify_reg(hkey, "Wine10d", REG_NONE, "V\0a\0l\0u", 8, 0);
todo_wine verify_reg(hkey, "Wine10e", REG_NONE, "V\0a\0l\0u", 8, 0);
exec_import_str("REGEDIT4\n\n"
@@ -382,14 +382,14 @@ static void test_basic_import(void)
" 25,00\n");
verify_reg(hkey, "Wine11a", REG_EXPAND_SZ, "%PATH%", 7, 0);
verify_reg(hkey, "Wine11b", REG_EXPAND_SZ, "%PATH%", 7, 0);
- todo_wine verify_reg(hkey, "Wine11c", REG_EXPAND_SZ, "%PATH%", 7, 0);
+ verify_reg(hkey, "Wine11c", REG_EXPAND_SZ, "%PATH%", 7, 0);
/* Wine11d */
size = sizeof(buffer);
lr = RegQueryValueExA(hkey, "Wine11d", NULL, &type, (BYTE *)&buffer, &size);
- todo_wine ok(lr == ERROR_SUCCESS, "RegQueryValueExA failed: %d\n", lr);
- todo_wine ok(type == REG_EXPAND_SZ, "got wrong type %u, expected %u\n", type, REG_EXPAND_SZ);
+ ok(lr == ERROR_SUCCESS, "RegQueryValueExA failed: %d\n", lr);
+ ok(type == REG_EXPAND_SZ, "got wrong type %u, expected %u\n", type, REG_EXPAND_SZ);
todo_wine ok(size == 6 || broken(size == 5) /* WinXP */, "got wrong size %u, expected 6\n", size);
- todo_wine ok(memcmp(buffer, "%PATH", size) == 0, "got wrong data\n");
+ ok(memcmp(buffer, "%PATH", size) == 0, "got wrong data\n");
/* Wine11e */
size = sizeof(buffer);
memset(buffer, '-', size);
@@ -417,8 +417,8 @@ static void test_basic_import(void)
hex[4] = 0x55; hex[5] = 0x66; hex[6] = 0x77; hex[7] = 0x88;
verify_reg(hkey, "Wine12a", REG_BINARY, hex, sizeof(hex), 0);
verify_reg(hkey, "Wine12b", REG_BINARY, hex, sizeof(hex), 0);
- todo_wine verify_reg(hkey, "Wine12c", REG_BINARY, hex, sizeof(hex), 0);
- todo_wine verify_reg(hkey, "Wine12d", REG_BINARY, hex, 6, 0);
+ verify_reg(hkey, "Wine12c", REG_BINARY, hex, sizeof(hex), 0);
+ verify_reg(hkey, "Wine12d", REG_BINARY, hex, 6, 0);
todo_wine verify_reg(hkey, "Wine12e", REG_BINARY, hex, 6, 0);
/* Test import with subkeys */
@@ -490,10 +490,9 @@ static void test_basic_import(void)
"[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
"\"Wine17\"=hex(7):4c,69,6e,65,20,\\");
lr = RegQueryValueExA(hkey, "Wine17", NULL, NULL, NULL, NULL);
- todo_wine ok(lr == ERROR_SUCCESS || broken(lr == ERROR_FILE_NOT_FOUND) /* WinXP */,
- "got %u, expected 0\n", lr);
+ ok(lr == ERROR_SUCCESS || broken(lr == ERROR_FILE_NOT_FOUND) /* WinXP */, "got %u, expected 0\n", lr);
if (lr == ERROR_SUCCESS)
- todo_wine verify_reg(hkey, "Wine17", REG_MULTI_SZ, "Line ", 6, 0);
+ verify_reg(hkey, "Wine17", REG_MULTI_SZ, "Line ", 6, TODO_REG_SIZE | TODO_REG_DATA);
RegCloseKey(hkey);
@@ -664,25 +663,25 @@ static void test_invalid_import(void)
"[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
"\"Multi-Line1\"=hex(7):4c,69,6e,65,20\\\n"
",63,6f,6e,63,61,74,65,6e,61,74,69,6f,6e,00,00\n\n");
- todo_wine verify_reg_nonexist(hkey, "Multi-Line1");
+ verify_reg_nonexist(hkey, "Multi-Line1");
exec_import_str("REGEDIT4\n\n"
"[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
"\"Multi-Line2\"=hex(7):4c,69,6e,65,20\\\n"
" ,63,6f,6e,63,61,74,65,6e,61,74,69,6f,6e,00,00\n\n");
- todo_wine verify_reg_nonexist(hkey, "Multi-Line2");
+ verify_reg_nonexist(hkey, "Multi-Line2");
exec_import_str("Windows Registry Editor Version 5.00\n\n"
"[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
"\"Multi-Line3\"=hex(7):4c,69,6e,65,20\\\n"
",63,6f,6e,63,61,74,65,6e,61,74,69,6f,6e,00,00\n\n");
- todo_wine verify_reg_nonexist(hkey, "Multi-Line3");
+ verify_reg_nonexist(hkey, "Multi-Line3");
exec_import_str("Windows Registry Editor Version 5.00\n\n"
"[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
"\"Multi-Line4\"=hex(7):4c,69,6e,65,20\\\n"
" ,63,6f,6e,63,61,74,65,6e,61,74,69,6f,6e,00,00\n\n");
- todo_wine verify_reg_nonexist(hkey, "Multi-Line4");
+ verify_reg_nonexist(hkey, "Multi-Line4");
exec_import_str("REGEDIT4\n\n"
"[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
@@ -749,7 +748,7 @@ static void test_invalid_import(void)
"\"Test17b\"=\"Value 2\"\n"
"\"Test\n"
"\\17c\"=\"Value 3\"\n\n");
- todo_wine verify_reg_nonexist(hkey, "Test17a");
+ verify_reg_nonexist(hkey, "Test17a");
verify_reg(hkey, "Test17b", REG_SZ, "Value 2", 8, 0);
verify_reg_nonexist(hkey, "Test17c");
@@ -759,8 +758,8 @@ static void test_invalid_import(void)
"5678\n"
"\"Test18b\"=\"Test \\\n"
"Value\"\n\n");
- todo_wine verify_reg_nonexist(hkey, "Test18a");
- todo_wine verify_reg_nonexist(hkey, "Test18b");
+ verify_reg_nonexist(hkey, "Test18a");
+ verify_reg_nonexist(hkey, "Test18b");
/* Test hex data concatenation for REG_NONE, REG_EXPAND_SZ and REG_BINARY */
exec_import_str("REGEDIT4\n\n"
@@ -778,11 +777,11 @@ static void test_invalid_import(void)
"\"Test19f\"=hex(0):56,00,61,00,\\;comment\n"
" 6c,00,75,00,\\#comment\n"
" 65,00,00,00\n\n");
- todo_wine verify_reg_nonexist(hkey, "Test19a");
- todo_wine verify_reg_nonexist(hkey, "Test19b");
- todo_wine verify_reg_nonexist(hkey, "Test19c");
- todo_wine verify_reg_nonexist(hkey, "Test19d");
- todo_wine verify_reg_nonexist(hkey, "Test19e");
+ verify_reg_nonexist(hkey, "Test19a");
+ verify_reg_nonexist(hkey, "Test19b");
+ verify_reg_nonexist(hkey, "Test19c");
+ verify_reg_nonexist(hkey, "Test19d");
+ verify_reg_nonexist(hkey, "Test19e");
verify_reg_nonexist(hkey, "Test19f");
exec_import_str("REGEDIT4\n\n"
@@ -800,11 +799,11 @@ static void test_invalid_import(void)
"\"Test20f\"=hex(2):25,50,41,\\;comment\n"
" 54,48,\\#comment\n"
" 25,00\n\n");
- todo_wine verify_reg_nonexist(hkey, "Test20a");
- todo_wine verify_reg_nonexist(hkey, "Test20b");
+ verify_reg_nonexist(hkey, "Test20a");
+ verify_reg_nonexist(hkey, "Test20b");
verify_reg_nonexist(hkey, "Test20c");
- todo_wine verify_reg_nonexist(hkey, "Test20d");
- todo_wine verify_reg_nonexist(hkey, "Test20e");
+ verify_reg_nonexist(hkey, "Test20d");
+ verify_reg_nonexist(hkey, "Test20e");
verify_reg_nonexist(hkey, "Test20f");
exec_import_str("REGEDIT4\n\n"
@@ -822,11 +821,11 @@ static void test_invalid_import(void)
"\"Test21f\"=hex:11,22,33,\\;comment\n"
" 44,55,66,\\#comment\n"
" 77,88\n\n");
- todo_wine verify_reg_nonexist(hkey, "Test21a");
- todo_wine verify_reg_nonexist(hkey, "Test21b");
+ verify_reg_nonexist(hkey, "Test21a");
+ verify_reg_nonexist(hkey, "Test21b");
verify_reg_nonexist(hkey, "Test21c");
- todo_wine verify_reg_nonexist(hkey, "Test21d");
- todo_wine verify_reg_nonexist(hkey, "Test21e");
+ verify_reg_nonexist(hkey, "Test21d");
+ verify_reg_nonexist(hkey, "Test21e");
verify_reg_nonexist(hkey, "Test21f");
/* Test support for characters greater than 0xff */
@@ -861,7 +860,7 @@ static void test_invalid_import(void)
verify_reg_nonexist(hkey, "Wine23e");
verify_reg_nonexist(hkey, "Wine23f");
verify_reg_nonexist(hkey, "Wine23g");
- todo_wine verify_reg_nonexist(hkey, "Wine23h");
+ verify_reg_nonexist(hkey, "Wine23h");
verify_reg_nonexist(hkey, "Wine23i");
verify_reg_nonexist(hkey, "Wine23j");
verify_reg_nonexist(hkey, "Wine23k");
@@ -878,10 +877,10 @@ static void test_invalid_import(void)
"\"Wine24b\"=hex(2):4c,69,6e,65,20\\\n"
"[HKEY_CURRENT_USER\\" KEY_BASE "\\Subkey2]\n");
verify_reg_nonexist(hkey, "Wine24b");
- todo_wine verify_key(hkey, "Subkey2");
+ verify_key(hkey, "Subkey2");
lr = RegDeleteKeyA(hkey, "Subkey2");
- todo_wine ok(lr == ERROR_SUCCESS, "RegDeleteKey failed: %u\n", lr);
+ ok(lr == ERROR_SUCCESS, "RegDeleteKey failed: %u\n", lr);
exec_import_str("REGEDIT4\n\n"
"[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
@@ -904,13 +903,13 @@ static void test_invalid_import(void)
verify_reg_nonexist(hkey, "Wine25a");
verify_reg_nonexist(hkey, "Wine25b");
verify_reg_nonexist(hkey, "Wine25c");
- todo_wine verify_reg_nonexist(hkey, "Wine25d");
+ verify_reg_nonexist(hkey, "Wine25d");
verify_reg_nonexist(hkey, "Wine25e");
- verify_reg(hkey, "Wine25f", REG_SZ, "Test value", 11, 0);
+ todo_wine verify_reg(hkey, "Wine25f", REG_SZ, "Test value", 11, 0);
todo_wine verify_reg_nonexist(hkey, "Wine25g");
todo_wine verify_reg_nonexist(hkey, "Wine25h");
verify_reg_nonexist(hkey, "Wine25i");
- todo_wine verify_reg(hkey, "Wine25j", REG_SZ, "Test value", 11, 0);
+ verify_reg(hkey, "Wine25j", REG_SZ, "Test value", 11, 0);
exec_import_str("REGEDIT4\n\n"
"[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
@@ -933,13 +932,13 @@ static void test_invalid_import(void)
verify_reg_nonexist(hkey, "Wine26a");
verify_reg_nonexist(hkey, "Wine26b");
verify_reg_nonexist(hkey, "Wine26c");
- todo_wine verify_reg_nonexist(hkey, "Wine26d");
+ verify_reg_nonexist(hkey, "Wine26d");
verify_reg_nonexist(hkey, "Wine26e");
- verify_reg(hkey, "Wine26f", REG_DWORD, &dword, sizeof(dword), 0);
+ todo_wine verify_reg(hkey, "Wine26f", REG_DWORD, &dword, sizeof(dword), 0);
todo_wine verify_reg_nonexist(hkey, "Wine26g");
todo_wine verify_reg_nonexist(hkey, "Wine26h");
verify_reg_nonexist(hkey, "Wine26i");
- todo_wine verify_reg(hkey, "Wine26j", REG_DWORD, &dword, sizeof(dword), 0);
+ verify_reg(hkey, "Wine26j", REG_DWORD, &dword, sizeof(dword), 0);
exec_import_str("REGEDIT4\n\n"
"[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
@@ -962,13 +961,13 @@ static void test_invalid_import(void)
verify_reg_nonexist(hkey, "Wine27a");
verify_reg_nonexist(hkey, "Wine27b");
verify_reg_nonexist(hkey, "Wine27c");
- todo_wine verify_reg_nonexist(hkey, "Wine27d");
+ verify_reg_nonexist(hkey, "Wine27d");
verify_reg_nonexist(hkey, "Wine27e");
- verify_reg(hkey, "Wine27f", REG_EXPAND_SZ, "%PATH%", 7, 0);
+ todo_wine verify_reg(hkey, "Wine27f", REG_EXPAND_SZ, "%PATH%", 7, 0);
todo_wine verify_reg_nonexist(hkey, "Wine27g");
todo_wine verify_reg_nonexist(hkey, "Wine27h");
verify_reg_nonexist(hkey, "Wine27i");
- todo_wine verify_reg(hkey, "Wine27j", REG_EXPAND_SZ, "%PATH%", 7, 0);
+ verify_reg(hkey, "Wine27j", REG_EXPAND_SZ, "%PATH%", 7, 0);
exec_import_str("REGEDIT4\n\n"
"[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
@@ -983,7 +982,7 @@ static void test_invalid_import(void)
";comment\n"
"@=\"Default value 2\"\n\n");
verify_reg_nonexist(hkey, "Wine28b");
- todo_wine verify_reg_nonexist(hkey, NULL);
+ verify_reg_nonexist(hkey, NULL);
exec_import_str("REGEDIT4\n\n"
"[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
@@ -991,10 +990,10 @@ static void test_invalid_import(void)
"#comment\n"
"@=\"Default value 3\"\n\n");
verify_reg_nonexist(hkey, "Wine28c");
- verify_reg(hkey, NULL, REG_SZ, "Default value 3", 16, 0);
+ todo_wine verify_reg(hkey, NULL, REG_SZ, "Default value 3", 16, 0);
lr = RegDeleteValueW(hkey, NULL);
- ok(lr == ERROR_SUCCESS, "RegDeleteValue failed: %u\n", lr);
+ todo_wine ok(lr == ERROR_SUCCESS, "RegDeleteValue failed: %u\n", lr);
exec_import_str("REGEDIT4\n\n"
"[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
@@ -1008,7 +1007,7 @@ static void test_invalid_import(void)
"\"Wine28e\"=hex(2):4c,69,6e,65,20\\\n"
"@=\"Default value 5\"\n\n");
verify_reg_nonexist(hkey, "Wine28e");
- verify_reg(hkey, NULL, REG_SZ, "Default value 5", 16, TODO_REG_DATA);
+ verify_reg(hkey, NULL, REG_SZ, "Default value 5", 16, 0);
exec_import_str("REGEDIT4\n\n"
"[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
@@ -1116,8 +1115,8 @@ static void test_comments(void)
"\"Wine2\"=\"Line 2\"\n\n");
lr = RegOpenKeyExA(HKEY_CURRENT_USER, KEY_BASE, 0, KEY_READ, &hkey);
ok(lr == ERROR_SUCCESS, "RegOpenKeyExA failed: %d\n", lr);
- todo_wine verify_reg(hkey, "Wine1", REG_SZ, "Line 1", 7, 0);
- todo_wine verify_reg(hkey, "Wine2", REG_SZ, "Line 2", 7, 0);
+ verify_reg(hkey, "Wine1", REG_SZ, "Line 1", 7, 0);
+ verify_reg(hkey, "Wine2", REG_SZ, "Line 2", 7, 0);
exec_import_str("REGEDIT4\n\n"
"[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
@@ -1143,7 +1142,7 @@ static void test_comments(void)
"\"Wine10\"=\"Another valid line\"\n\n");
verify_reg_nonexist(hkey, "Wine7");
verify_reg(hkey, "Wine8", REG_SZ, "A valid line", 13, 0);
- todo_wine verify_reg(hkey, "Wine9", REG_MULTI_SZ, "Line concatenation\0", 20, 0);
+ verify_reg(hkey, "Wine9", REG_MULTI_SZ, "Line concatenation\0", 20, 0);
verify_reg(hkey, "Wine10", REG_SZ, "Another valid line", 19, 0);
exec_import_str("REGEDIT4\n\n"
@@ -1220,7 +1219,7 @@ static void test_comments(void)
" 63,6f,6e,\\;comment\n"
" 63,61,74,\\;comment\n"
" 65,6e,61,74,69,6f,6e,00,00\n\n");
- todo_wine verify_reg(hkey, "Multi-Line1", REG_MULTI_SZ, "Line concatenation\0", 20, 0);
+ verify_reg(hkey, "Multi-Line1", REG_MULTI_SZ, "Line concatenation\0", 20, 0);
exec_import_str("REGEDIT4\n\n"
"[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
@@ -1237,7 +1236,7 @@ static void test_comments(void)
" 63,6f,6e,\\;comment\n"
" 63,61,74,\\;comment\n"
" 65,6e,61,74,69,6f,6e,00,00\n\n");
- todo_wine verify_reg(hkey, "Multi-Line3", REG_MULTI_SZ, "Line concatenation\0", 20, 0);
+ verify_reg(hkey, "Multi-Line3", REG_MULTI_SZ, "Line concatenation\0", 20, 0);
exec_import_str("REGEDIT4\n\n"
"[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
@@ -1246,7 +1245,7 @@ static void test_comments(void)
" 63,6f,6e,\\;#comment\n"
" 63,61,74,\\;#comment\n"
" 65,6e,61,74,69,6f,6e,00,00\n\n");
- todo_wine verify_reg(hkey, "Multi-Line4", REG_MULTI_SZ, "Line concatenation\0", 20, 0);
+ verify_reg(hkey, "Multi-Line4", REG_MULTI_SZ, "Line concatenation\0", 20, 0);
exec_import_str("REGEDIT4\n\n"
"[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
@@ -1264,7 +1263,7 @@ static void test_comments(void)
" 63,61,74,\\\n\n"
" 65,6e,\\;comment\n\n"
" 61,74,69,6f,6e,00,00\n\n");
- todo_wine verify_reg(hkey, "Multi-Line6", REG_MULTI_SZ, "Line concatenation\0", 20, 0);
+ verify_reg(hkey, "Multi-Line6", REG_MULTI_SZ, "Line concatenation\0", 20, TODO_REG_SIZE);
exec_import_str("REGEDIT4\n\n"
"[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
@@ -1272,8 +1271,8 @@ static void test_comments(void)
"\"Wine27b\"=hex(2):25,50,41,54,48,25,00\t;comment\n"
"\"Wine27c\"=hex(2):25,50,41,54,48,25,00 #comment\n"
"\"Wine27d\"=hex(2):25,50,41,54,48,25,00\t#comment\n\n");
- todo_wine verify_reg(hkey, "Wine27a", REG_EXPAND_SZ, "%PATH%", 7, 0);
- todo_wine verify_reg(hkey, "Wine27b", REG_EXPAND_SZ, "%PATH%", 7, 0);
+ verify_reg(hkey, "Wine27a", REG_EXPAND_SZ, "%PATH%", 7, 0);
+ verify_reg(hkey, "Wine27b", REG_EXPAND_SZ, "%PATH%", 7, 0);
verify_reg_nonexist(hkey, "Wine27c");
verify_reg_nonexist(hkey, "Wine27d");
@@ -1293,9 +1292,9 @@ static void test_comments(void)
" 25,50,41,54,48,25,00\n\n");
verify_reg(hkey, "Wine28a", REG_EXPAND_SZ, "%HOME%\\%PATH%", 14, 0);
verify_reg_nonexist(hkey, "Wine28b");
- todo_wine verify_reg(hkey, "Wine28c", REG_EXPAND_SZ, "%HOME%\\%PATH%", 14, 0);
+ verify_reg(hkey, "Wine28c", REG_EXPAND_SZ, "%HOME%\\%PATH%", 14, 0);
verify_reg_nonexist(hkey, "Wine28d");
- todo_wine verify_reg(hkey, "Wine28e", REG_EXPAND_SZ, "%HOME%\\%PATH%", 14, 0);
+ verify_reg(hkey, "Wine28e", REG_EXPAND_SZ, "%HOME%\\%PATH%", 14, 0);
verify_reg_nonexist(hkey, "Wine28f");
exec_import_str("REGEDIT4\n\n"
@@ -1305,7 +1304,7 @@ static void test_comments(void)
";comment\n"
" 65,6e,\\;comment\n"
" 61,74,69,6f,6e,00,00\n\n");
- todo_wine verify_reg(hkey, "Wine29a", REG_MULTI_SZ, "Line concatenation\0", 20, 0);
+ verify_reg(hkey, "Wine29a", REG_MULTI_SZ, "Line concatenation\0", 20, 0);
exec_import_str("REGEDIT4\n\n"
"[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
@@ -1314,7 +1313,7 @@ static void test_comments(void)
" ;comment\n"
" 65,6e,\\;comment\n"
" 61,74,69,6f,6e,00,00\n\n");
- todo_wine verify_reg(hkey, "Wine29b", REG_MULTI_SZ, "Line concatenation\0", 20, 0);
+ verify_reg(hkey, "Wine29b", REG_MULTI_SZ, "Line concatenation\0", 20, 0);
exec_import_str("REGEDIT4\n\n"
"[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
@@ -1323,7 +1322,7 @@ static void test_comments(void)
"#comment\n"
" 65,6e,\\;comment\n"
" 61,74,69,6f,6e,00,00\n\n");
- verify_reg_nonexist(hkey, "Wine29c");
+ todo_wine verify_reg_nonexist(hkey, "Wine29c");
exec_import_str("REGEDIT4\n\n"
"[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
@@ -1408,7 +1407,7 @@ static void test_import_with_whitespace(void)
verify_reg(hkey, "Wine4a", REG_SZ, "Tab and four spaces", 20, 0);
dword = 0x112233;
verify_reg(hkey, "Wine4b", REG_DWORD, &dword, sizeof(dword), 0);
- todo_wine verify_reg(hkey, "Wine4c", REG_MULTI_SZ, "Line concatenation\0", 20, 0);
+ verify_reg(hkey, "Wine4c", REG_MULTI_SZ, "Line concatenation\0", 20, 0);
exec_import_str(" REGEDIT4\n\n"
"\t[HKEY_CURRENT_USER\\" KEY_BASE "]\n"
--
2.11.0
More information about the wine-patches
mailing list