Sanity check crashing spamassassin(1).
[PerlMail.git] / PerlMail / Contacts / 9210.pm
index e0c08a9..9d7a880 100644 (file)
@@ -73,8 +73,9 @@ my($self,$data)=@_;
        for my $fields (@F) {
                @names==@$fields or die "Fields line fields do not match the header names number";
                my $id=$fields->[0];
-               my $mail_name;
-               my $mail_data;
+               my($omail_name,$omail_data);
+               my($name_last,$name_first);
+               my @mail;
                for my $fieldi (1..$#names) {
                        my $string=$fields->[$fieldi];
                        next if $string eq "";
@@ -83,10 +84,11 @@ my($self,$data)=@_;
                        $id{$id}{$name}=$string if $first;
                        if ($name eq "Last name") {
                                die "Non-matching field" if $string ne $id{$id}{$name};
-                               push @{$id{$id}{""}},{
-            "FIELD"=>"Name",
-            "FIELD-DATA"=>$string,
-                                               } if $first;
+                               $name_last=$string;
+                               }
+                       elsif ($name eq "First name") {
+                               die "Non-matching field" if $string ne $id{$id}{$name};
+                               $name_first=$string;
                                }
                        elsif ($name eq "Company") {
                                die "Non-matching field" if $string ne $id{$id}{$name};
@@ -96,26 +98,36 @@ my($self,$data)=@_;
                                                } if $first;
                                }
                        elsif ($name eq "Other Mail desc.") {
-                               $mail_name=$string;
+                               $omail_name=$string;
                                }
                        elsif ($name eq "Other Mail") {
-                               $mail_data=$string;
+                               $omail_data=$string;
                                }
                        elsif ($name eq "Mail") {
-                               $mail_data=$string;
+                               push @mail,undef()=>$string;
+                               }
+                       elsif ($name=~/^Mail [(](.*)[)]$/) {
+                               push @mail,$1=>$string;
                                }
                        }
+               my $name=$name_last;
+               $name.=" ".$name_first if defined $name_first;
                push @{$id{$id}{""}},{
-                               "FIELD"=>"Mail",
-                               "FIELD-NAME"=>$mail_name,
-                               "FIELD-DATA"=>$mail_data,
-                               } if $mail_name||$mail_data;
-               }
-       my @r;
-       for my $id (sort { ($a<=>$b); } keys(%id)) {
-               do { push @r,$_ if $_; } for $id{$id}{""};
+                               "FIELD"=>"Name",
+                               "FIELD-DATA"=>$name,
+                               } if defined $name;
+               push @mail,$omail_name=>$omail_data if defined $omail_data;
+               while (@mail) {
+                       my $name=shift @mail;
+                       my $data=shift @mail;
+                       push @{$id{$id}{""}},{
+                                       "FIELD"=>"Mail",
+                                       "FIELD-NAME"=>$name,
+                                       "FIELD-DATA"=>$data,
+                                       };
+                       }
                }
-       return @r;
+       return map(($id{$_}{""}||()),(sort { ($a<=>$b); } keys(%id)));
 }
 
 1;