pidl:NDR/Parser: only include structs in ndr_interface_public_struct
authorAndrew Bartlett <abartlet@samba.org>
Wed, 4 Dec 2019 22:37:05 +0000 (11:37 +1300)
committerStefan Metzmacher <metze@samba.org>
Tue, 10 Dec 2019 17:45:46 +0000 (17:45 +0000)
We only have ndrdump and the fuzzers set up for structures, not BITMAPS,
ENUMS etc.

Pair-Programmed-With: Stefan Metzmacher <metze@samba.org>

Signed-off-by: Andrew Bartlett <abartlet@samba.org>
Signed-off-by: Stefan Metzmacher <metze@samba.org>
Autobuild-User(master): Stefan Metzmacher <metze@samba.org>
Autobuild-Date(master): Tue Dec 10 17:45:46 UTC 2019 on sn-devel-184

pidl/lib/Parse/Pidl/Samba4/NDR/Parser.pm
selftest/knownfail.d/ndrdump-structs-only [deleted file]

index 91b5f9429949e6fefe354f17dfe847039dfa2f14..c2821874db84a6b20a82d0dccae70d72bdc2c820 100644 (file)
@@ -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 (file)
index 733ea49..0000000
+++ /dev/null
@@ -1 +0,0 @@
-^samba.tests.blackbox.ndrdump.samba.tests.blackbox.ndrdump.NdrDumpTests.test_ndrdump_with_enum_not_struct