libndr: change subcontext buffer allocation to allocate on subcontext_start.
authorGünther Deschner <gd@samba.org>
Wed, 16 Dec 2009 21:54:02 +0000 (22:54 +0100)
committerKarolin Seeger <kseeger@samba.org>
Fri, 19 Feb 2010 13:32:30 +0000 (14:32 +0100)
Guenther
(cherry picked from commit c9fa97b01774d767acfabaf1eec7a6aad1510440)
(cherry picked from commit 07a51577816e493c04f0fa7baaf798e9455d923f)

librpc/ndr/ndr.c

index 400045f5d04d86283aece837f46052affc2738a6..2df406318c3d8c483204b9506c0a3c42941ef4c8 100644 (file)
@@ -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) {