summaryrefslogtreecommitdiff
path: root/librpc/ndr
diff options
context:
space:
mode:
authorAndrew Bartlett <abartlet@samba.org>2016-06-15 15:54:06 +1200
committerAndrew Bartlett <abartlet@samba.org>2016-06-27 00:18:17 +0200
commit4304eac85437d72f4aed36fc7797004cd97fbc9a (patch)
treefb44358be19e2629d7cd022e70060225a07547b0 /librpc/ndr
parentf5ca34e6e813a5b92ea084995ffc0ebb3c8b1368 (diff)
downloadsamba-4304eac85437d72f4aed36fc7797004cd97fbc9a.tar.gz
librpc: Avoid talloc in GUID_from_data_blob()
This is often found in inner loops in the dsdb code, because LDB DNs often contain a GUID string Signed-off-by: Andrew Bartlett <abartlet@samba.org> Reviewed-by: Garming Sam <garming@catalyst.net.nz>
Diffstat (limited to 'librpc/ndr')
-rw-r--r--librpc/ndr/uuid.c24
1 files changed, 8 insertions, 16 deletions
diff --git a/librpc/ndr/uuid.c b/librpc/ndr/uuid.c
index 9d955abc3d5..fbd305e5401 100644
--- a/librpc/ndr/uuid.c
+++ b/librpc/ndr/uuid.c
@@ -71,13 +71,10 @@ _PUBLIC_ NTSTATUS GUID_from_data_blob(const DATA_BLOB *s, struct GUID *guid)
switch(s->length) {
case 36:
{
- TALLOC_CTX *mem_ctx;
- const char *string;
+ char string[37];
+ memcpy(string, s->data, 36);
+ string[36] = 0;
- mem_ctx = talloc_new(NULL);
- NT_STATUS_HAVE_NO_MEMORY(mem_ctx);
- string = talloc_strndup(mem_ctx, (const char *)s->data, s->length);
- NT_STATUS_HAVE_NO_MEMORY(string);
if (11 == sscanf(string,
"%08x-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x",
&time_low, &time_mid, &time_hi_and_version,
@@ -85,26 +82,21 @@ _PUBLIC_ NTSTATUS GUID_from_data_blob(const DATA_BLOB *s, struct GUID *guid)
&node[0], &node[1], &node[2], &node[3], &node[4], &node[5])) {
status = NT_STATUS_OK;
}
- talloc_free(mem_ctx);
break;
}
case 38:
{
- TALLOC_CTX *mem_ctx;
- const char *string;
-
- mem_ctx = talloc_new(NULL);
- NT_STATUS_HAVE_NO_MEMORY(mem_ctx);
- string = talloc_strndup(mem_ctx, (const char *)s->data, s->length);
- NT_STATUS_HAVE_NO_MEMORY(string);
- if (11 == sscanf((const char *)s->data,
+ char string[39];
+ memcpy(string, s->data, 38);
+ string[38] = 0;
+
+ if (11 == sscanf(string,
"{%08x-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x}",
&time_low, &time_mid, &time_hi_and_version,
&clock_seq[0], &clock_seq[1],
&node[0], &node[1], &node[2], &node[3], &node[4], &node[5])) {
status = NT_STATUS_OK;
}
- talloc_free(mem_ctx);
break;
}
case 32: