diff --git a/smtp/data.go b/smtp/data.go index 7a59d75..ac73fa6 100644 --- a/smtp/data.go +++ b/smtp/data.go @@ -135,7 +135,7 @@ func (r *DataReader) Read(p []byte) (int, error) { if len(r.buf) > 0 { // Reject bare \r. for i, c := range r.buf { - if c == '\r' && (i == len(r.buf) || r.buf[i+1] != '\n') { + if c == '\r' && (i == len(r.buf)-1 || r.buf[i+1] != '\n') { r.badcrlf = true } } diff --git a/smtp/data_test.go b/smtp/data_test.go index f438b08..893271f 100644 --- a/smtp/data_test.go +++ b/smtp/data_test.go @@ -153,3 +153,9 @@ func (r *oneReader) Read(buf []byte) (int, error) { r.buf = r.buf[1:] return 1, nil } + +func FuzzReader(f *testing.F) { + f.Fuzz(func(t *testing.T, data string) { + io.ReadAll(NewDataReader(bufio.NewReader(strings.NewReader(data)))) + }) +}