summaryrefslogtreecommitdiff
path: root/librpc
diff options
context:
space:
mode:
authorJoseph Sutton <josephsutton@catalyst.net.nz>2023-02-13 14:58:23 +1300
committerAndreas Schneider <asn@cryptomilk.org>2023-04-12 13:52:31 +0000
commita1e64e57378b90e8fdc5fbd4ea0d090af5ee0405 (patch)
tree0057646e0d515eb6b634b2c906f9dddf81e92c5e /librpc
parent894500b670883518a59f12f6ad276cb4e154c181 (diff)
downloadsamba-a1e64e57378b90e8fdc5fbd4ea0d090af5ee0405.tar.gz
libndr: Handle allocation failure
If a talloc function returns NULL, indicating failure, the failure could be masked by the next talloc call allocating on the NULL context. Signed-off-by: Joseph Sutton <josephsutton@catalyst.net.nz> Reviewed-by: Andreas Schneider <asn@samba.org>
Diffstat (limited to 'librpc')
-rw-r--r--librpc/ndr/ndr_basic.c3
1 files changed, 3 insertions, 0 deletions
diff --git a/librpc/ndr/ndr_basic.c b/librpc/ndr/ndr_basic.c
index e239cfb27d9..39aa3690cbe 100644
--- a/librpc/ndr/ndr_basic.c
+++ b/librpc/ndr/ndr_basic.c
@@ -1016,12 +1016,15 @@ _PUBLIC_ enum ndr_err_code ndr_pull_ipv6address(struct ndr_pull *ndr, int ndr_fl
uint8_t addr[IPV6_BYTES];
char *addr_str = talloc_strdup(ndr->current_mem_ctx, "");
int i;
+ NDR_ERR_HAVE_NO_MEMORY(addr_str);
NDR_CHECK(ndr_pull_array_uint8(ndr, ndr_flags, addr, IPV6_BYTES));
for (i = 0; i < IPV6_BYTES; ++i) {
addr_str = talloc_asprintf_append(addr_str, "%02x", addr[i]);
+ NDR_ERR_HAVE_NO_MEMORY(addr_str);
/* We need a ':' every second byte but the last one */
if (i%2 == 1 && i != (IPV6_BYTES - 1)) {
addr_str = talloc_strdup_append(addr_str, ":");
+ NDR_ERR_HAVE_NO_MEMORY(addr_str);
}
}
*address = addr_str;