Author: msergeant
Date: Mon Apr 14 05:24:18 2008
New Revision: 875

Modified:
   trunk/lib/Qpsmtpd/PollServer.pm

Log:
Fix for when a regular DATA packet starts with "." but isn't End-of-data


Modified: trunk/lib/Qpsmtpd/PollServer.pm
==============================================================================
--- trunk/lib/Qpsmtpd/PollServer.pm     (original)
+++ trunk/lib/Qpsmtpd/PollServer.pm     Mon Apr 14 05:24:18 2008
@@ -16,6 +16,7 @@
     start_time
     cmd_timeout
     conn
+    prev_crlf
     _auth
     _auth_mechanism
     _auth_state
@@ -208,6 +209,7 @@
     $self->{header_lines} = '';
     $self->{data_size} = 0;
     $self->{in_header} = 1;
+    $self->{prev_crlf} = 0;
     $self->{max_size} = ($self->config('databytes'))[0] || 0;
     
     $self->log(LOGDEBUG, "max_size: $self->{max_size} / size: 
$self->{data_size}");
@@ -225,7 +227,11 @@
 
     my $done = 0;
     my $remainder;
-    if ($data =~ s/^\.\r\n(.*)\z//ms) {
+    if ($data =~ s/\r\n\.\r\n(.*)\z/\r\n/ms
+        ||
+        ($self->{prev_crlf} && $data =~ s/^\.\r\n(.*)\z//ms)
+       ) 
+    {
         $remainder = $1;
         $done = 1;
     }
@@ -268,6 +274,7 @@
 
         $self->transaction->body_write(\$data);
         $self->{data_size} += length $data;
+        $self->{prev_crlf} = $data =~ /\r\n\z/;
     }
  
 

Reply via email to