- check return value of ndr_push_set_switch_value()
authormetze <metze@0c0555d6-39d7-0310-84fc-f1cc0bd64818>
Fri, 2 Nov 2007 11:01:18 +0000 (11:01 +0000)
committerStefan Metzmacher <metze@samba.org>
Wed, 7 Nov 2007 11:13:09 +0000 (12:13 +0100)
- 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

source/librpc/ndr/ndr.c

index 8900e7a84f7d21813265a91cfcc015f3fc9f5e4d..15388913205c452ae68f9fbd9a693c8bea6e6572 100644 (file)
@@ -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;