develooper Front page | perl.qpsmtpd.dev | Postings from April 2008

[svn:qpsmtpd] r875 - trunk/lib/Qpsmtpd

From:
msergeant
Date:
April 14, 2008 05:24
Subject:
[svn:qpsmtpd] r875 - trunk/lib/Qpsmtpd
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/;
     }
  
 



Comments to Ask Bjørn Hansen at ask@perl.org | Group listing | About