diff options
author | Matthias Dieter Wallnöfer <mwallnoefer@yahoo.de> | 2010-03-13 20:03:03 +0100 |
---|---|---|
committer | Matthias Dieter Wallnöfer <mwallnoefer@yahoo.de> | 2010-03-14 18:46:21 +0100 |
commit | f72790daaa6ecef922edcfba38effdc8e5885782 (patch) | |
tree | 55129d12502fb7c7ced8f07117e4c0b6eccb9bec /source4 | |
parent | 33eb1c95e55bb26aee7ee3876e38136eb56ef36e (diff) | |
download | samba-f72790daaa6ecef922edcfba38effdc8e5885782.tar.gz samba-f72790daaa6ecef922edcfba38effdc8e5885782.tar.bz2 samba-f72790daaa6ecef922edcfba38effdc8e5885782.zip |
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.
Diffstat (limited to 'source4')
-rw-r--r-- | source4/lib/registry/ldb.c | 11 |
1 files changed, 8 insertions, 3 deletions
diff --git a/source4/lib/registry/ldb.c b/source4/lib/registry/ldb.c index e168d8fd02..71824e7732 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; |