diff options
author | Günther Deschner <gd@samba.org> | 2009-12-16 22:54:02 +0100 |
---|---|---|
committer | Karolin Seeger <kseeger@samba.org> | 2010-02-22 15:50:36 +0100 |
commit | c1d2213d8f1b163dc0852f748fe4bef60e87aed4 (patch) | |
tree | 2c94a2116b3a49d0198f1b73660f794d213efa21 | |
parent | a122b5fa29d242218c1b38e992578dedb7b2737d (diff) | |
download | samba-c1d2213d8f1b163dc0852f748fe4bef60e87aed4.tar.gz samba-c1d2213d8f1b163dc0852f748fe4bef60e87aed4.tar.xz samba-c1d2213d8f1b163dc0852f748fe4bef60e87aed4.zip |
libndr: change subcontext buffer allocation to allocate on subcontext_start.
Guenther
(cherry picked from commit c9fa97b01774d767acfabaf1eec7a6aad1510440)
(cherry picked from commit d2bb2f150a8cf4e18c0bbbc357e237261942dccb)
-rw-r--r-- | librpc/ndr/ndr.c | 10 |
1 files changed, 7 insertions, 3 deletions
diff --git a/librpc/ndr/ndr.c b/librpc/ndr/ndr.c index 17eb5e5a058..521d4ec8d25 100644 --- a/librpc/ndr/ndr.c +++ b/librpc/ndr/ndr.c @@ -572,6 +572,11 @@ _PUBLIC_ enum ndr_err_code ndr_push_subcontext_start(struct ndr_push *ndr, NDR_ERR_HAVE_NO_MEMORY(subndr); subndr->flags = ndr->flags; + if (size_is > 0) { + NDR_CHECK(ndr_push_zero(subndr, size_is)); + subndr->offset = 0; + } + *_subndr = subndr; return NDR_ERR_SUCCESS; } @@ -588,12 +593,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) { |