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/;
}