From: Andrew Bartlett Date: Wed, 4 Dec 2019 22:37:05 +0000 (+1300) Subject: pidl:NDR/Parser: only include structs in ndr_interface_public_struct X-Git-Tag: ldb-2.1.0~300 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=bc0c876a9ebbec1a31856a9e7147a481c69ba434;p=thirdparty%2Fsamba.git pidl:NDR/Parser: only include structs in ndr_interface_public_struct We only have ndrdump and the fuzzers set up for structures, not BITMAPS, ENUMS etc. Pair-Programmed-With: Stefan Metzmacher Signed-off-by: Andrew Bartlett Signed-off-by: Stefan Metzmacher Autobuild-User(master): Stefan Metzmacher Autobuild-Date(master): Tue Dec 10 17:45:46 UTC 2019 on sn-devel-184 --- diff --git a/pidl/lib/Parse/Pidl/Samba4/NDR/Parser.pm b/pidl/lib/Parse/Pidl/Samba4/NDR/Parser.pm index 91b5f942994..c2821874db8 100644 --- a/pidl/lib/Parse/Pidl/Samba4/NDR/Parser.pm +++ b/pidl/lib/Parse/Pidl/Samba4/NDR/Parser.pm @@ -88,6 +88,18 @@ sub has_fast_array($$) return ($t->{NAME} eq "uint8"); } +sub is_public_struct +{ + my ($d) = @_; + if (!has_property($d, "public")) { + return 0; + } + my $t = $d; + if ($d->{TYPE} eq "TYPEDEF") { + $t = $d->{DATA}; + } + return $t->{TYPE} eq "STRUCT"; +} #################################### # defer() is like pidl(), but adds to @@ -2794,7 +2806,7 @@ sub FunctionTable($$) my $uname = uc $interface->{NAME}; foreach my $d (@{$interface->{TYPES}}) { - next unless (has_property($d, "public")); + next unless (is_public_struct($d)); $count_public_structs += 1; } return if ($#{$interface->{FUNCTIONS}}+1 == 0 and @@ -2807,8 +2819,8 @@ sub FunctionTable($$) $self->pidl("static const struct ndr_interface_public_struct $interface->{NAME}\_public_structs[] = {"); foreach my $d (@{$interface->{TYPES}}) { - next unless (has_property($d, "public")); - $self->StructEntry($d) + next unless (is_public_struct($d)); + $self->StructEntry($d); } $self->pidl("\t{ .name = NULL }"); $self->pidl("};"); @@ -3034,7 +3046,7 @@ sub ParseTypePrintFunction($$$) $self->pidl_hdr("void ".TypeFunctionName("ndr_print", $e)."(struct ndr_print *ndr, const char *name, $args);"); - if (has_property($e, "public")) { + if (is_public_struct($e)) { $self->pidl("static void ".TypeFunctionName("ndr_print_flags", $e). "(struct ndr_print *$ndr, const char *name, int unused, $args)" ); diff --git a/selftest/knownfail.d/ndrdump-structs-only b/selftest/knownfail.d/ndrdump-structs-only deleted file mode 100644 index 733ea495490..00000000000 --- a/selftest/knownfail.d/ndrdump-structs-only +++ /dev/null @@ -1 +0,0 @@ -^samba.tests.blackbox.ndrdump.samba.tests.blackbox.ndrdump.NdrDumpTests.test_ndrdump_with_enum_not_struct