made all protocol except PC29 reject %xx characters
[spider.git] / perl / DXProt.pm
index a28be5ff0f5f7e9088416f06db65a3171bdf2d57..7d429b1b7c3aa74375294b23169721742863f2c6 100644 (file)
@@ -149,7 +149,13 @@ sub normal
        my ($pcno) = $field[0] =~ /^PC(\d\d)/; # just get the number
        return unless $pcno;
        return if $pcno < 10 || $pcno > 51;
-       
+
+       # dump bad protocol messages unless it is a PC29
+       if ($line =~ /\%[0-9A-F][0-9A-F]/o && $pcno != 29) {
+               dbg('chan', "CORRUPT protocol message - dumped");
+               return;
+       }
+
        # local processing 1
        my $pcr;
        eval {
@@ -437,8 +443,6 @@ sub normal
                                $user->put;
                        }
                        
-                       # queue up any messages
-                       DXMsg::queue_msg(0) if $self->state eq 'normal';
                        return if $newline eq "PC19^";
 
                        # add hop count 
@@ -451,10 +455,6 @@ sub normal
                        $self->send_local_config();
                        $self->send(pc22());
                        $self->state('normal');
-                       
-                       # queue mail
-                       DXMsg::queue_msg(0);
-
                        return;
                }
                
@@ -483,12 +483,9 @@ sub normal
                
                if ($pcno == 22) {
                        $self->state('normal');
-                       
-                       # queue mail
-                       DXMsg::queue_msg(0);
                        return;
                }
-               
+                               
                if ($pcno == 23 || $pcno == 27) { # WWV info
                        
                        # route 'foreign' pc27s