Hi Aurélien, Yes, There is some issue with mapi dissector actually we have no the same result when regenerate mapi dissector... https://code.wireshark.org/review/#/c/11476/
And yes, the code don't build... Cheers On Thu, Feb 11, 2016 at 4:26 PM, Aurélien Aptel <[email protected]> wrote: > Hi, > > I'm in the process of syncing tools/pidl with samba (almost done, more > on this later). > > Using master (0cd0844) bundled pidl, I wanted to make sure none of the > generated dissectors were edited by hand so I've run the following > (from epan/dissectors/pidl/README) to regenerate them: > > cd epan/dissectors/pidl > for file in *.idl */*.idl; do > echo "Generating dissector for $file" > ../../../tools/pidl/pidl --includedir . --ws-parser -- $file; > done > cp packet-dcerpc*.* .. > > Most generated files are almost identical (slightly altered comments and > whitespace because pidl wasn't run again) except for > packet-dcerpc-mapi.[ch] and packet-dcerpc-nsapi.[ch] who differs > greatly. These new generated files don't compile because they are > malformed. Sample output: > > static int > mapi_dissect_element_SPropValue_value(tvbuff_t *tvb _U_, int offset _U_, > packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 > *drep _U_, guint32 *) > { > offset = mapi_dissect_SPropValue_CTR(tvb, offset, pinfo, tree, di, > drep, hf_mapi_property_types, *); > > return offset; > } > > > Notice the lone * at the last param of the call. > I've tried to debug it (but I don't know much about pidl) > > in tools/pidl/lib/Parse/Pidl/Wireshark/NDR.pm:446 (sub Element) > > if (defined $isoruseswitch) { > my $type = $isoruseswitch->[0]; > my $name = $isoruseswitch->[1]; > > my $switch_dt = getType($type); > my $switch_raw_type = SwitchType($e, $type, "uint32"); > if (not defined($switch_raw_type)) { > die("Unknown type[$type]\n"); > } > my $switch_type = "g${switch_raw_type}"; > > $moreparam = ", $switch_type *".$name; > > if (($e->{PROPERTIES}->{switch_is} eq "") && > ($switchvars{$name}) && > #not a "native" type > (!($type =~ /^uint(8|16|1632|32|3264|64)/))) { > $param = $name; > } elsif ( $switch_dt->{DATA}->{TYPE} eq "ENUM") { > $param = $name; > } else { > $param = "*".$name; > # ^^^^^^^^^^^^^^^^^ > # here we prefix the param > # with a star but $name is empty > } > > Later in the same sub we call ElementLevel with $param eq "*" > > > $self->ElementLevel($e,$_,$hf,$dissectorname.$add,$pn,$ifname,$param); > > Finally, in the sub ElementLevel we generate the wrong call: > > } elsif > (defined($self->{conformance}->{types}->{$l->{DATA_TYPE}})) { > $call= > $self->{conformance}->{types}->{$l->{DATA_TYPE}}->{DISSECTOR_NAME}; > $self->{conformance}->{types}->{$l->{DATA_TYPE}}->{USED} = > 1; > } else { > > > Here $call is set to > > "offset = mapi_dissect_SPropValue_CTR(tvb, offset, pinfo, tree, di, drep, > @HF@, @PARAM@);" > > And @PARAM@ is replaced with "*". > > -- > Aurélien Aptel / SUSE Labs Samba Team > GPG: 1839 CB5F 9F5B FB9B AA97 8C99 03C8 A49B 521B D5D3 > SUSE Linux GmbH, Maxfeldstraße 5, 90409 Nürnberg, Germany > GF: Felix Imendörffer, Jane Smithard, Graham Norton, HRB 21284 (AG > Nürnberg) > > ___________________________________________________________________________ > Sent via: Wireshark-dev mailing list <[email protected]> > Archives: https://www.wireshark.org/lists/wireshark-dev > Unsubscribe: https://wireshark.org/mailman/options/wireshark-dev > mailto:[email protected] > ?subject=unsubscribe >
___________________________________________________________________________ Sent via: Wireshark-dev mailing list <[email protected]> Archives: https://www.wireshark.org/lists/wireshark-dev Unsubscribe: https://wireshark.org/mailman/options/wireshark-dev mailto:[email protected]?subject=unsubscribe
