diff options
-rw-r--r-- | source4/lib/registry/regf.c | 12 |
1 files changed, 8 insertions, 4 deletions
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; |