pidl: calculate subcontext_size only once per pull
authorDouglas Bagnall <douglas.bagnall@catalyst.net.nz>
Thu, 28 Dec 2023 10:07:56 +0000 (23:07 +1300)
committerJule Anger <janger@samba.org>
Mon, 12 Feb 2024 10:53:13 +0000 (10:53 +0000)
For security_ace_coda in security.idl, the sub-context size is
involves a slightly non-trivial function call which returns a constant
value.

In all other cases, a constant expression is used, and this makes
no difference.

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 9811762775b28e16035afb2c319b55c4bf3699d3)

pidl/lib/Parse/Pidl/Samba4/NDR/Parser.pm

index 859da0a914fec015dcc01e3e025b28447ffd60ea..d7386d5b2ccefbda90b0f5593c923f5604a6a3d9 100644 (file)
@@ -603,7 +603,8 @@ sub ParseSubcontextPullStart($$$$$)
        $self->pidl("{");
        $self->indent;
        $self->pidl("struct ndr_pull *$subndr;");
-       $self->pidl("NDR_CHECK(ndr_pull_subcontext_start($ndr, &$subndr, $l->{HEADER_SIZE}, $subcontext_size));");
+       $self->pidl("ssize_t sub_size = $subcontext_size;");
+       $self->pidl("NDR_CHECK(ndr_pull_subcontext_start($ndr, &$subndr, $l->{HEADER_SIZE}, sub_size));");
 
        if (defined $l->{COMPRESSION}) {
                $subndr = $self->ParseCompressionPullStart($e, $l, $subndr, $env);
@@ -622,7 +623,7 @@ sub ParseSubcontextPullEnd($$$$$)
                $self->ParseCompressionPullEnd($e, $l, $subndr, $env);
        }
 
-       $self->pidl("NDR_CHECK(ndr_pull_subcontext_end($ndr, $subndr, $l->{HEADER_SIZE}, $subcontext_size));");
+       $self->pidl("NDR_CHECK(ndr_pull_subcontext_end($ndr, $subndr, $l->{HEADER_SIZE}, sub_size));");
        $self->deindent;
        $self->pidl("}");
 }