Author: jelmer Date: 2007-04-25 16:10:54 +0000 (Wed, 25 Apr 2007) New Revision: 22520
WebSVN: http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=rev&root=samba&rev=22520 Log: Fix the TYPE command. Modified: branches/SAMBA_4_0/ branches/SAMBA_4_0/source/pidl/lib/Parse/Pidl/Wireshark/Conformance.pm branches/SAMBA_4_0/source/pidl/lib/Parse/Pidl/Wireshark/NDR.pm branches/SAMBA_4_0/source/pidl/tests/wireshark-conf.pl Changeset: Property changes on: branches/SAMBA_4_0 ___________________________________________________________________ Name: bzr:merge ...skipped... Modified: branches/SAMBA_4_0/source/pidl/lib/Parse/Pidl/Wireshark/Conformance.pm =================================================================== --- branches/SAMBA_4_0/source/pidl/lib/Parse/Pidl/Wireshark/Conformance.pm 2007-04-25 15:24:01 UTC (rev 22519) +++ branches/SAMBA_4_0/source/pidl/lib/Parse/Pidl/Wireshark/Conformance.pm 2007-04-25 16:10:54 UTC (rev 22520) @@ -124,6 +124,12 @@ warning($pos, "invalid BASE_TYPE `$base_type'"); } + $dissectorname =~ s/^\"(.*)\"$/$1/g; + + if (not ($dissectorname =~ /;$/)) { + warning($pos, "missing semicolon"); + } + $data->{types}->{$name} = { NAME => $name, POS => $pos, Modified: branches/SAMBA_4_0/source/pidl/lib/Parse/Pidl/Wireshark/NDR.pm =================================================================== --- branches/SAMBA_4_0/source/pidl/lib/Parse/Pidl/Wireshark/NDR.pm 2007-04-25 15:24:01 UTC (rev 22519) +++ branches/SAMBA_4_0/source/pidl/lib/Parse/Pidl/Wireshark/NDR.pm 2007-04-25 16:10:54 UTC (rev 22520) @@ -834,6 +834,8 @@ { my ($self, $type,$call,$ft,$base,$mask,$vals,$length) = @_; + return if (defined($self->{conformance}->{types}->{$type})); + $self->{conformance}->{types}->{$type} = { NAME => $type, DISSECTOR_NAME => $call, Modified: branches/SAMBA_4_0/source/pidl/tests/wireshark-conf.pl =================================================================== --- branches/SAMBA_4_0/source/pidl/tests/wireshark-conf.pl 2007-04-25 15:24:01 UTC (rev 22519) +++ branches/SAMBA_4_0/source/pidl/tests/wireshark-conf.pl 2007-04-25 16:10:54 UTC (rev 22520) @@ -5,7 +5,7 @@ use strict; use warnings; -use Test::More tests => 45; +use Test::More tests => 47; use FindBin qw($RealBin); use lib "$RealBin"; use Util; @@ -61,11 +61,11 @@ test_warnings("nofile:1: Unknown command `CODE'\n", sub { parse_conf("CODE END\n"); } ); -is_deeply(parse_conf("TYPE winreg_String dissect_myminregstring FT_STRING BASE_DEC 0 0 2\n"), { types => { winreg_String => { +is_deeply(parse_conf("TYPE winreg_String dissect_myminregstring(); FT_STRING BASE_DEC 0 0 2\n"), { types => { winreg_String => { NAME => "winreg_String", POS => { FILE => "nofile", LINE => 1 }, USED => 0, - DISSECTOR_NAME => "dissect_myminregstring", + DISSECTOR_NAME => "dissect_myminregstring();", FT_TYPE => "FT_STRING", BASE_TYPE => "BASE_DEC", MASK => 0, @@ -87,13 +87,13 @@ sub { parse_conf("TYPE mytype dissector\n"); }); test_warnings("nofile:1: dissector name does not contain `dissect'\n", - sub { parse_conf("TYPE winreg_String myminregstring FT_STRING BASE_DEC 0 0 2\n"); }); + sub { parse_conf("TYPE winreg_String myminregstring; FT_STRING BASE_DEC 0 0 2\n"); }); test_warnings("nofile:1: invalid FT_TYPE `BLA'\n", - sub { parse_conf("TYPE winreg_String dissect_myminregstring BLA BASE_DEC 0 0 2\n"); }); + sub { parse_conf("TYPE winreg_String dissect_myminregstring; BLA BASE_DEC 0 0 2\n"); }); test_warnings("nofile:1: invalid BASE_TYPE `BLOE'\n", - sub { parse_conf("TYPE winreg_String dissect_myminregstring FT_UINT32 BLOE 0 0 2\n"); }); + sub { parse_conf("TYPE winreg_String dissect_myminregstring; FT_UINT32 BLOE 0 0 2\n"); }); is_deeply(parse_conf("TFS hf_bla \"True string\" \"False String\"\n"), { tfs => { hf_bla => { @@ -163,3 +163,38 @@ test_errors("nofile:1: incomplete HF_FIELD command\n", sub { parse_conf("HF_FIELD hf_idx\n"); }); + +is_deeply(parse_conf("TYPE winreg_String dissect_myminregstring(); FT_STRING BASE_DEC 0 0 0 2\n"), { + types => { + winreg_String => { + NAME => "winreg_String", + POS => { FILE => "nofile", LINE => 1 }, + USED => 0, + DISSECTOR_NAME => "dissect_myminregstring();", + FT_TYPE => "FT_STRING", + BASE_TYPE => "BASE_DEC", + MASK => 0, + VALSSTRING => 0, + ALIGNMENT => 0 + } + } + } +); + + +is_deeply(parse_conf("TYPE winreg_String \"offset = dissect_myminregstring([EMAIL PROTECTED]@);\" FT_STRING BASE_DEC 0 0 0 2\n"), { + types => { + winreg_String => { + NAME => "winreg_String", + POS => { FILE => "nofile", LINE => 1 }, + USED => 0, + DISSECTOR_NAME => "offset = dissect_myminregstring([EMAIL PROTECTED]@);", + FT_TYPE => "FT_STRING", + BASE_TYPE => "BASE_DEC", + MASK => 0, + VALSSTRING => 0, + ALIGNMENT => 0 + } + } + } +);