From 8067bf629c4c4a2a4c1e66af41fc387448d468c6 Mon Sep 17 00:00:00 2001 From: Wilco Baan Hofman Date: Tue, 19 Jan 2010 12:06:01 +0100 Subject: Fix unintentional free of the last value when adding a new value to a key. Signed-off-by: Jelmer Vernooij --- source4/lib/registry/regf.c | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) (limited to 'source4/lib/registry') diff --git a/source4/lib/registry/regf.c b/source4/lib/registry/regf.c index a7fed42054..a96c7db0ee 100644 --- a/source4/lib/registry/regf.c +++ b/source4/lib/registry/regf.c @@ -1791,11 +1791,9 @@ static WERROR regf_set_value(struct hive_key *key, const char *name, break; } } - /* Free data, if any */ - if (!(vk.data_length & 0x80000000)) { - hbin_free(regf, vk.data_offset); - } } + + /* If it's new, create the vk struct, if it's old, free the old data. */ if (old_vk_offset == -1) { vk.header = "vk"; vk.name_length = strlen(name); @@ -1806,7 +1804,13 @@ static WERROR regf_set_value(struct hive_key *key, const char *name, vk.data_name = NULL; vk.flag = 0; } + } else { + /* Free data, if any */ + if (!(vk.data_length & 0x80000000)) { + hbin_free(regf, vk.data_offset); + } } + /* Set the type and data */ vk.data_length = data.length; vk.data_type = type; -- cgit