aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/mime/quotedprintable/reader_test.go5
-rw-r--r--src/mime/quotedprintable/writer.go7
-rw-r--r--src/mime/quotedprintable/writer_test.go6
3 files changed, 18 insertions, 0 deletions
diff --git a/src/mime/quotedprintable/reader_test.go b/src/mime/quotedprintable/reader_test.go
index c12d2ca3db..885d1a650d 100644
--- a/src/mime/quotedprintable/reader_test.go
+++ b/src/mime/quotedprintable/reader_test.go
@@ -70,6 +70,11 @@ func TestReader(t *testing.T) {
// Transport padding
{in: "foo= \r\nbar", want: "foobar"},
{in: "foo=\t \r\nbar", want: "foobar"},
+ {
+ // Line break with period at the end.
+ in: strings.Repeat(".", 75) + "=\r\n=2E\r\n=2E\r\nfooter.",
+ want: strings.Repeat(".", 76) + "\r\n.\r\nfooter.",
+ },
}
for _, tt := range tests {
var buf strings.Builder
diff --git a/src/mime/quotedprintable/writer.go b/src/mime/quotedprintable/writer.go
index 69b5a11232..7fae1f08a9 100644
--- a/src/mime/quotedprintable/writer.go
+++ b/src/mime/quotedprintable/writer.go
@@ -133,6 +133,13 @@ func (w *Writer) checkLastByte() error {
}
b := w.line[w.i-1]
+ if w.i == 1 && b == '.' {
+ w.i--
+ if err := w.encode(b); err != nil {
+ return err
+ }
+ return nil
+ }
if isWhitespace(b) {
w.i--
if err := w.encode(b); err != nil {
diff --git a/src/mime/quotedprintable/writer_test.go b/src/mime/quotedprintable/writer_test.go
index 07411fe269..b53bb76d5e 100644
--- a/src/mime/quotedprintable/writer_test.go
+++ b/src/mime/quotedprintable/writer_test.go
@@ -88,6 +88,12 @@ func testWriter(t *testing.T, binary bool) {
in: strings.Repeat(" ", 77),
want: strings.Repeat(" ", 75) + "=\r\n =20",
},
+ {
+ // Line break with period at the end.
+ in: strings.Repeat(".", 76) + "\n.\nfooter.",
+ want: strings.Repeat(".", 75) + "=\r\n=2E\r\n=2E\r\nfooter.",
+ wantB: strings.Repeat(".", 75) + "=\r\n.=0A.=0Afooter.",
+ },
}
for _, tt := range tests {