diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/mime/quotedprintable/reader_test.go | 5 | ||||
| -rw-r--r-- | src/mime/quotedprintable/writer.go | 7 | ||||
| -rw-r--r-- | src/mime/quotedprintable/writer_test.go | 6 |
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 { |
