diff options
-rw-r--r-- | lib/smtp.c | 5 | ||||
-rw-r--r-- | tests/data/Makefile.inc | 2 | ||||
-rw-r--r-- | tests/data/test911 | 1 | ||||
-rw-r--r-- | tests/data/test951 | 45 | ||||
-rw-r--r-- | tests/data/test952 | 45 | ||||
-rwxr-xr-x | tests/ftpserver.pl | 4 |
6 files changed, 98 insertions, 4 deletions
diff --git a/lib/smtp.c b/lib/smtp.c index d9f1a854a..3f3b45a95 100644 --- a/lib/smtp.c +++ b/lib/smtp.c @@ -1289,6 +1289,11 @@ static CURLcode smtp_perform(struct connectdata *conn, bool *connected, /* Store the first recipient (or NULL if not specified) */ smtp->rcpt = data->set.mail_rcpt; + /* Initial data character is the first character in line: it is implicitly + preceded by a virtual CRLF. */ + smtp->trailing_crlf = TRUE; + smtp->eob = 2; + /* Start the first command in the DO phase */ if((data->set.upload || data->set.mimepost.kind) && data->set.mail_rcpt) /* MAIL transfer */ diff --git a/tests/data/Makefile.inc b/tests/data/Makefile.inc index 9635d12a1..31d299942 100644 --- a/tests/data/Makefile.inc +++ b/tests/data/Makefile.inc @@ -103,7 +103,7 @@ test909 test910 test911 test912 test913 test914 test915 test916 test917 \ test918 test919 test920 test921 test922 test923 test924 test925 test926 \ test927 test928 test929 test930 test931 test932 test933 test934 test935 \ test936 test937 test938 test939 test940 test941 test942 test943 test944 \ -test945 test946 test947 test948 test949 test950 \ +test945 test946 test947 test948 test949 test950 test951 test952 \ \ test1000 test1001 test1002 test1003 test1004 test1005 test1006 test1007 \ test1008 test1009 test1010 test1011 test1012 test1013 test1014 test1015 \ diff --git a/tests/data/test911 b/tests/data/test911 index cc87349b8..f4c545830 100644 --- a/tests/data/test911 +++ b/tests/data/test911 @@ -40,7 +40,6 @@ DATA QUIT
</protocol> <upload> -
.
</upload> </verify> diff --git a/tests/data/test951 b/tests/data/test951 new file mode 100644 index 000000000..7d2e17b1b --- /dev/null +++ b/tests/data/test951 @@ -0,0 +1,45 @@ +<testcase> +<info> +<keywords> +SMTP +</keywords> +</info> + +# +# Server-side +<reply> +</reply> + +# +# Client-side +<client> +<server> +smtp +</server> + <name> +SMTP data with dot as first character + </name> +<stdin> +.This first line starts with a dot
+</stdin> +<command> +smtp://%HOSTIP:%SMTPPORT/951 --mail-rcpt recipient@example.com --mail-from sender@example.com -T - +</command> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<protocol> +EHLO 951
+MAIL FROM:<sender@example.com>
+RCPT TO:<recipient@example.com>
+DATA
+QUIT
+</protocol> +<upload> +..This first line starts with a dot
+.
+</upload> +</verify> +</testcase> diff --git a/tests/data/test952 b/tests/data/test952 new file mode 100644 index 000000000..54334b21e --- /dev/null +++ b/tests/data/test952 @@ -0,0 +1,45 @@ +<testcase> +<info> +<keywords> +SMTP +</keywords> +</info> + +# +# Server-side +<reply> +</reply> + +# +# Client-side +<client> +<server> +smtp +</server> + <name> +SMTP data with single dot-only line + </name> +<stdin> +.
+</stdin> +<command> +smtp://%HOSTIP:%SMTPPORT/952 --mail-rcpt recipient@example.com --mail-from sender@example.com -T - +</command> +</client> + +# +# Verify data after the test has been "shot" +<verify> +<protocol> +EHLO 952
+MAIL FROM:<sender@example.com>
+RCPT TO:<recipient@example.com>
+DATA
+QUIT
+</protocol> +<upload> +..
+.
+</upload> +</verify> +</testcase> diff --git a/tests/ftpserver.pl b/tests/ftpserver.pl index 956275881..f7f4fa2ae 100755 --- a/tests/ftpserver.pl +++ b/tests/ftpserver.pl @@ -6,7 +6,7 @@ # | (__| |_| | _ <| |___ # \___|\___/|_| \_\_____| # -# Copyright (C) 1998 - 2014, 2017, Daniel Stenberg, <daniel@haxx.se>, et al. +# Copyright (C) 1998 - 2018, Daniel Stenberg, <daniel@haxx.se>, et al. # # This software is licensed as described in the file COPYING, which # you should have received as part of this distribution. The terms @@ -920,7 +920,7 @@ sub DATA_smtp { print FILE $line if(!$nosave); $raw .= $line; - if($raw =~ /\x0d\x0a\x2e\x0d\x0a/) { + if($raw =~ /(?:^|\x0d\x0a)\x2e\x0d\x0a/) { # end of data marker! $eob = 1; } |