From b6774912f44d143cfabc6482ad0c1316a5749c83 Mon Sep 17 00:00:00 2001 From: =?utf8?q?G=C3=BCnther=20Deschner?= Date: Wed, 16 Dec 2009 22:54:02 +0100 Subject: [PATCH] libndr: change subcontext buffer allocation to allocate on subcontext_start. Guenther (cherry picked from commit c9fa97b01774d767acfabaf1eec7a6aad1510440) (cherry picked from commit 07a51577816e493c04f0fa7baaf798e9455d923f) --- librpc/ndr/ndr.c | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/librpc/ndr/ndr.c b/librpc/ndr/ndr.c index 400045f5d04..2df406318c3 100644 --- a/librpc/ndr/ndr.c +++ b/librpc/ndr/ndr.c @@ -590,6 +590,11 @@ _PUBLIC_ enum ndr_err_code ndr_push_subcontext_start(struct ndr_push *ndr, NDR_ERR_HAVE_NO_MEMORY(subndr); subndr->flags = ndr->flags & ~LIBNDR_FLAG_NDR64; + if (size_is > 0) { + NDR_CHECK(ndr_push_zero(subndr, size_is)); + subndr->offset = 0; + } + *_subndr = subndr; return NDR_ERR_SUCCESS; } @@ -606,12 +611,11 @@ _PUBLIC_ enum ndr_err_code ndr_push_subcontext_end(struct ndr_push *ndr, if (size_is >= 0) { padding_len = size_is - subndr->offset; - if (padding_len > 0) { - NDR_CHECK(ndr_push_zero(subndr, padding_len)); - } else if (padding_len < 0) { + if (padding_len < 0) { return ndr_push_error(ndr, NDR_ERR_SUBCONTEXT, "Bad subcontext (PUSH) content_size %d is larger than size_is(%d)", (int)subndr->offset, (int)size_is); } + subndr->offset = size_is; } switch (header_size) { -- 2.11.4.GIT