From b79374224c8b4a66386ba1265995fdcdecb66e29 Mon Sep 17 00:00:00 2001 From: Winni Neessen Date: Wed, 29 Nov 2023 17:18:55 +0100 Subject: [PATCH] Handle nil buffer in Reader and update tests Updated the Reader struct in reader.go to properly handle nil buffers. This prevents potential errors from nil pointer dereference. Also added the fmt package for debugging purposes. Correspondingly, additional tests in reader_test.go were also added to cover these edge cases and ensure the Reader struct correctly handles them. --- reader.go | 2 +- reader_test.go | 17 +++++++++++++++-- 2 files changed, 16 insertions(+), 3 deletions(-) diff --git a/reader.go b/reader.go index ee74f7d..acde0a2 100644 --- a/reader.go +++ b/reader.go @@ -25,7 +25,7 @@ func (r *Reader) Read(p []byte) (n int, err error) { if r.err != nil { return 0, r.err } - if r.empty() { + if r.empty() || r.buf == nil { r.Reset() if len(p) == 0 { return 0, nil diff --git a/reader_test.go b/reader_test.go index 3f30735..c1c198b 100644 --- a/reader_test.go +++ b/reader_test.go @@ -6,7 +6,9 @@ package mail import ( "bytes" + "errors" "fmt" + "io" "testing" ) @@ -64,9 +66,20 @@ func TestReader_Read_error(t *testing.T) { // TestReader_Read_empty tests the Reader.Read method with an empty buffer func TestReader_Read_empty(t *testing.T) { r := Reader{buf: []byte{}} - var p []byte + p := make([]byte, 1) + p[0] = 'a' _, err := r.Read(p) - if err != nil { + if err != nil && !errors.Is(err, io.EOF) { + t.Errorf("Reader failed: %s", err) + } +} + +// TestReader_Read_nil tests the Reader.Read method with a nil buffer +func TestReader_Read_nil(t *testing.T) { + r := Reader{buf: nil, off: -10} + p := make([]byte, 0) + _, err := r.Read(p) + if err != nil && !errors.Is(err, io.EOF) { t.Errorf("Reader failed: %s", err) } }