fix incorrect error about bare cr/lf when sending a message over smtp

we weren't properly tracking the cr's and lf's when being strict about message
lines when sending data.

we are reading buffered data from a Reader. if that chunk happens to start with
a newline, we weren't looking at the previously written data, which could be a
cr. instead, in that case, we would always claim the cr/lf wasn't correct.

the new test case triggered the behaviour before having the fix.

should solve issue #129 by x8x, thanks for the report!
This commit is contained in:
Mechiel Lukkien
2024-02-16 20:14:31 +01:00
parent fd359d5973
commit 37de8de1c5
2 changed files with 28 additions and 2 deletions

View File

@ -129,3 +129,27 @@ func TestDataReader(t *testing.T) {
t.Fatalf("got err %v, expected io.ErrUnexpectedEOF", err)
}
}
func TestDataWriteLineBoundaries(t *testing.T) {
const valid = "Subject: test\r\n\r\nbody\r\n"
if err := DataWrite(io.Discard, &oneReader{[]byte(valid)}); err != nil {
t.Fatalf("data write: %v", err)
}
}
// oneReader returns data one byte at a time.
type oneReader struct {
buf []byte
}
func (r *oneReader) Read(buf []byte) (int, error) {
if len(r.buf) == 0 {
return 0, io.EOF
}
if len(buf) == 0 {
return 0, nil
}
buf[0] = r.buf[0]
r.buf = r.buf[1:]
return 1, nil
}