regedit: Free the memory used by the REG_DWORD and hex data types after saving the registry value.
We use a BOOL to handle all hex types, including those that are undefined (e.g.0x100). Signed-off-by: Hugh McMaster <hugh.mcmaster@outlook.com> Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
parent
a1924ae2da
commit
8504a1563d
|
@ -163,6 +163,7 @@ struct parser
|
||||||
DWORD data_type; /* data type */
|
DWORD data_type; /* data type */
|
||||||
void *data; /* value data */
|
void *data; /* value data */
|
||||||
DWORD data_size; /* size of the data (in bytes) */
|
DWORD data_size; /* size of the data (in bytes) */
|
||||||
|
BOOL hex_type; /* parsing a hex data type */
|
||||||
enum parser_state state; /* current parser state */
|
enum parser_state state; /* current parser state */
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -322,6 +323,7 @@ static BOOL parse_data_type(struct parser *parser, WCHAR **line)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
parser->data_type = val;
|
parser->data_type = val;
|
||||||
|
parser->hex_type = TRUE;
|
||||||
*line = end + 2;
|
*line = end + 2;
|
||||||
}
|
}
|
||||||
return TRUE;
|
return TRUE;
|
||||||
|
@ -826,6 +828,13 @@ static WCHAR *set_value_state(struct parser *parser, WCHAR *pos)
|
||||||
RegSetValueExW(parser->hkey, parser->value_name, 0, parser->data_type,
|
RegSetValueExW(parser->hkey, parser->value_name, 0, parser->data_type,
|
||||||
parser->data, parser->data_size);
|
parser->data, parser->data_size);
|
||||||
|
|
||||||
|
if (parser->data_type == REG_DWORD || parser->hex_type)
|
||||||
|
{
|
||||||
|
HeapFree(GetProcessHeap(), 0, parser->data);
|
||||||
|
parser->data = NULL;
|
||||||
|
parser->hex_type = FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
if (parser->reg_version == REG_VERSION_31)
|
if (parser->reg_version == REG_VERSION_31)
|
||||||
set_state(parser, PARSE_WIN31_LINE);
|
set_state(parser, PARSE_WIN31_LINE);
|
||||||
else
|
else
|
||||||
|
@ -1463,6 +1472,7 @@ BOOL import_registry_file(FILE *reg_file)
|
||||||
parser.data_type = 0;
|
parser.data_type = 0;
|
||||||
parser.data = NULL;
|
parser.data = NULL;
|
||||||
parser.data_size = 0;
|
parser.data_size = 0;
|
||||||
|
parser.hex_type = FALSE;
|
||||||
parser.state = HEADER;
|
parser.state = HEADER;
|
||||||
|
|
||||||
pos = parser.two_wchars;
|
pos = parser.two_wchars;
|
||||||
|
|
Loading…
Reference in New Issue