regedit: Free the buffer and reset data information on error and after setting the value.

Signed-off-by: Hugh McMaster <hugh.mcmaster@outlook.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
Hugh McMaster 2017-06-26 13:47:16 +00:00 committed by Alexandre Julliard
parent cee99826b6
commit 758340a6e1
1 changed files with 11 additions and 3 deletions

View File

@ -758,6 +758,9 @@ static WCHAR *string_data_state(struct parser *parser, WCHAR *pos)
return line;
invalid:
parser->data = NULL;
parser->data_size = 0;
set_state(parser, LINE_START);
return line;
}
@ -781,6 +784,7 @@ static WCHAR *dword_data_state(struct parser *parser, WCHAR *pos)
invalid:
HeapFree(GetProcessHeap(), 0, parser->data);
parser->data = NULL;
parser->data_size = 0;
set_state(parser, LINE_START);
return line;
@ -807,6 +811,10 @@ static WCHAR *hex_data_state(struct parser *parser, WCHAR *pos)
return line;
invalid:
HeapFree(GetProcessHeap(), 0, parser->data);
parser->data = NULL;
parser->data_size = 0;
set_state(parser, LINE_START);
return line;
}
@ -827,10 +835,10 @@ static WCHAR *set_value_state(struct parser *parser, WCHAR *pos)
parser->data, parser->data_size);
if (parser->parse_type == REG_DWORD || parser->parse_type == REG_BINARY)
{
HeapFree(GetProcessHeap(), 0, parser->data);
parser->data = NULL;
}
parser->data = NULL;
parser->data_size = 0;
if (parser->reg_version == REG_VERSION_31)
set_state(parser, PARSE_WIN31_LINE);