From f72790daaa6ecef922edcfba38effdc8e5885782 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Matthias=20Dieter=20Walln=C3=B6fer?= Date: Sat, 13 Mar 2010 20:03:03 +0100 Subject: [PATCH] s4:registry - ldb.c - fix up the memory handling in "reg_ldb_unpack_value" Don't substitute existing data blobs with new ones and make sure, that the result objects in the data blob don't have memory dependencies of the LDB value input. --- source4/lib/registry/ldb.c | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/source4/lib/registry/ldb.c b/source4/lib/registry/ldb.c index e168d8fd02a..71824e7732d 100644 --- a/source4/lib/registry/ldb.c +++ b/source4/lib/registry/ldb.c @@ -73,8 +73,11 @@ static void reg_ldb_unpack_value(TALLOC_CTX *mem_ctx, case REG_DWORD: if (val != NULL) { uint32_t tmp = strtoul((char *)val->data, NULL, 0); - *data = data_blob_talloc(mem_ctx, NULL, 4); - SIVAL(data->data, 0, tmp); + data->data = talloc_size(mem_ctx, sizeof(uint32_t) + 1); + if (data->data != NULL) { + SIVAL(data->data, 0, tmp); + } + data->length = sizeof(uint32_t); } else { data->data = NULL; data->length = 0; @@ -84,7 +87,9 @@ static void reg_ldb_unpack_value(TALLOC_CTX *mem_ctx, case REG_BINARY: default: if (val != NULL) { - *data = data_blob_talloc(mem_ctx, val->data, val->length); + data->data = talloc_memdup(mem_ctx, val->data, + val->length); + data->length = val->length; } else { data->data = NULL; data->length = 0; -- 2.11.4.GIT