diff --git a/programs/regedit/regproc.c b/programs/regedit/regproc.c index 0a356cb828a..ea0b6f81335 100644 --- a/programs/regedit/regproc.c +++ b/programs/regedit/regproc.c @@ -504,6 +504,27 @@ static void free_parser_data(struct parser *parser) parser->data_size = 0; } +static void prepare_hex_string_data(struct parser *parser) +{ + if (parser->data_type == REG_EXPAND_SZ || parser->data_type == REG_MULTI_SZ) + { + BYTE *data = parser->data; + + if (data[parser->data_size - 1] != 0) + { + data[parser->data_size] = 0; + parser->data_size++; + } + + if (!parser->is_unicode) + { + parser->data = GetWideStringN(parser->data, parser->data_size, &parser->data_size); + parser->data_size *= sizeof(WCHAR); + HeapFree(GetProcessHeap(), 0, data); + } + } +} + enum reg_versions { REG_VERSION_31, REG_VERSION_40, @@ -852,23 +873,7 @@ static WCHAR *hex_data_state(struct parser *parser, WCHAR *pos) return line; } - if (parser->data_type == REG_EXPAND_SZ || parser->data_type == REG_MULTI_SZ) - { - BYTE *data = parser->data; - - if (data[parser->data_size - 1] != 0x00) - { - data[parser->data_size] = 0x00; - parser->data_size++; - } - - if (!parser->is_unicode) - { - parser->data = GetWideStringN(parser->data, parser->data_size, &parser->data_size); - parser->data_size *= sizeof(WCHAR); - HeapFree(GetProcessHeap(), 0, data); - } - } + prepare_hex_string_data(parser); set_state(parser, SET_VALUE); return line; @@ -903,6 +908,7 @@ static WCHAR *hex_multiline_state(struct parser *parser, WCHAR *pos) if (!(line = get_line(parser->file))) { + prepare_hex_string_data(parser); set_state(parser, SET_VALUE); return pos; } diff --git a/programs/regedit/tests/regedit.c b/programs/regedit/tests/regedit.c index b3f6e764dd9..2839a110721 100644 --- a/programs/regedit/tests/regedit.c +++ b/programs/regedit/tests/regedit.c @@ -500,7 +500,7 @@ static void test_basic_import(void) exec_import_str("REGEDIT4\n\n" "[HKEY_CURRENT_USER\\" KEY_BASE "]\n" "\"Wine17b\"=hex(2):25,50,41,54,48,25,\\"); - verify_reg(hkey, "Wine17b", REG_EXPAND_SZ, "%PATH%", 7, TODO_REG_SIZE | TODO_REG_DATA); + verify_reg(hkey, "Wine17b", REG_EXPAND_SZ, "%PATH%", 7, 0); exec_import_str("REGEDIT4\n\n" "[HKEY_CURRENT_USER\\" KEY_BASE "]\n" @@ -510,7 +510,7 @@ static void test_basic_import(void) exec_import_str("REGEDIT4\n\n" "[HKEY_CURRENT_USER\\" KEY_BASE "]\n" "\"Wine17d\"=hex(7):4c,69,6e,65,\\"); - verify_reg(hkey, "Wine17d", REG_MULTI_SZ, "Line", 5, TODO_REG_SIZE | TODO_REG_DATA); + verify_reg(hkey, "Wine17d", REG_MULTI_SZ, "Line", 5, 0); exec_import_str("REGEDIT4\n\n" "[HKEY_CURRENT_USER\\" KEY_BASE "]\n"