From e0c24fa2487fb1ea9852494a9e6160899c0c08e4 Mon Sep 17 00:00:00 2001 From: metze Date: Fri, 2 Nov 2007 11:01:18 +0000 Subject: - check return value of ndr_push_set_switch_value() - fix memory leaks in error pathes metze git-svn-id: svn+ssh://svn.samba.org/data/svn/samba/branches/SAMBA_4_0@25798 0c0555d6-39d7-0310-84fc-f1cc0bd64818 (This used to be commit a0d0a06a9e39ea4fd07e9381f4b3397f403ab79d) --- source3/librpc/ndr/ndr.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/source3/librpc/ndr/ndr.c b/source3/librpc/ndr/ndr.c index 8900e7a84f..1538891320 100644 --- a/source3/librpc/ndr/ndr.c +++ b/source3/librpc/ndr/ndr.c @@ -806,6 +806,7 @@ size_t ndr_size_struct(const void *p, int flags, ndr_push_flags_fn_t push) ndr->flags |= flags | LIBNDR_FLAG_NO_NDR_SIZE; status = push(ndr, NDR_SCALARS|NDR_BUFFERS, p); if (!NT_STATUS_IS_OK(status)) { + talloc_free(ndr); return 0; } ret = ndr->offset; @@ -828,9 +829,15 @@ size_t ndr_size_union(const void *p, int flags, uint32_t level, ndr_push_flags_f ndr = ndr_push_init_ctx(NULL); if (!ndr) return 0; ndr->flags |= flags | LIBNDR_FLAG_NO_NDR_SIZE; - ndr_push_set_switch_value(ndr, p, level); + + status = ndr_push_set_switch_value(ndr, p, level); + if (!NT_STATUS_IS_OK(status)) { + talloc_free(ndr); + return 0; + } status = push(ndr, NDR_SCALARS|NDR_BUFFERS, p); if (!NT_STATUS_IS_OK(status)) { + talloc_free(ndr); return 0; } ret = ndr->offset; -- cgit