[PATCH 3/7] regedit: Free the memory used by the REG_DWORD and hex data types after saving the registry value
Hugh McMaster
hugh.mcmaster at outlook.com
Fri Jun 16 08:06:23 CDT 2017
We use a BOOL to handle all hex types, including those that are undefined (e.g.0x100).
Signed-off-by: Hugh McMaster <hugh.mcmaster at outlook.com>
---
programs/regedit/regproc.c | 10 ++++++++++
1 file changed, 10 insertions(+)
diff --git a/programs/regedit/regproc.c b/programs/regedit/regproc.c
index bdae29e..ea93a39 100644
--- a/programs/regedit/regproc.c
+++ b/programs/regedit/regproc.c
@@ -163,6 +163,7 @@ struct parser
DWORD data_type; /* data type */
void *data; /* value data */
DWORD data_size; /* size of the data (in bytes) */
+ BOOL hex_type; /* parsing a hex data type */
enum parser_state state; /* current parser state */
};
@@ -322,6 +323,7 @@ static BOOL parse_data_type(struct parser *parser, WCHAR **line)
return FALSE;
parser->data_type = val;
+ parser->hex_type = TRUE;
*line = end + 2;
}
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,
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)
set_state(parser, PARSE_WIN31_LINE);
else
@@ -1465,6 +1474,7 @@ BOOL import_registry_file(FILE *reg_file)
parser.data_type = 0;
parser.data = NULL;
parser.data_size = 0;
+ parser.hex_type = FALSE;
parser.state = HEADER;
pos = parser.two_wchars;
--
2.7.4
More information about the wine-patches
mailing list