ndr: ndr_push_security_ace: calculate coda size once
authorDouglas Bagnall <douglas.bagnall@catalyst.net.nz>
Mon, 8 Jan 2024 01:50:30 +0000 (14:50 +1300)
committerJule Anger <janger@samba.org>
Mon, 12 Feb 2024 10:53:13 +0000 (10:53 +0000)
Signed-off-by: Douglas Bagnall <douglas.bagnall@catalyst.net.nz>
Reviewed-by: Andrew Bartlett <abartlet@samba.org>
BUG: https://bugzilla.samba.org/show_bug.cgi?id=15574
(cherry picked from commit a72c198921f64f2502f543c7158762c64cb3074e)

librpc/ndr/ndr_sec_helper.c

index e07ee233599e4380d084e22c6447775dfa6d7808..508bcd219dda10be2f87f5c2bd8c45f5ca56ecf3 100644 (file)
@@ -162,10 +162,14 @@ _PUBLIC_ enum ndr_err_code ndr_push_security_ace(struct ndr_push *ndr, ndr_flags
                NDR_CHECK(ndr_push_dom_sid(ndr, NDR_SCALARS, &r->trustee));
                if (sec_ace_has_extra_blob(r->type)) {
                        struct ndr_push *_ndr_coda;
-                       NDR_CHECK(ndr_push_subcontext_start(ndr, &_ndr_coda, 0, ndr_subcontext_size_of_ace_coda(r, ndr_size_security_ace(r, ndr->flags), ndr->flags)));
+                       size_t coda_size = ndr_subcontext_size_of_ace_coda(
+                               r,
+                               ndr_size_security_ace(r, ndr->flags),
+                               ndr->flags);
+                       NDR_CHECK(ndr_push_subcontext_start(ndr, &_ndr_coda, 0, coda_size));
                        NDR_CHECK(ndr_push_set_switch_value(_ndr_coda, &r->coda, r->type));
                        NDR_CHECK(ndr_push_security_ace_coda(_ndr_coda, NDR_SCALARS|NDR_BUFFERS, &r->coda));
-                       NDR_CHECK(ndr_push_subcontext_end(ndr, _ndr_coda, 0, ndr_subcontext_size_of_ace_coda(r, ndr_size_security_ace(r, ndr->flags), ndr->flags)));
+                       NDR_CHECK(ndr_push_subcontext_end(ndr, _ndr_coda, 0, coda_size));
                }
                NDR_CHECK(ndr_push_trailer_align(ndr, 5));
        }