From 648c35bf333e11ee925031a0cbb569506d43baaf Mon Sep 17 00:00:00 2001 From: Marcel Schramm Date: Sat, 29 Apr 2023 15:52:02 +0200 Subject: [PATCH] Pass through errors encountered during usage of io.Reader (#22) --- gotenv.go | 4 ++++ gotenv_test.go | 15 +++++++++++++++ 2 files changed, 19 insertions(+) diff --git a/gotenv.go b/gotenv.go index dc013e1..8e7c281 100644 --- a/gotenv.go +++ b/gotenv.go @@ -209,6 +209,10 @@ func strictParse(r io.Reader, override bool) (Env, error) { firstLine := true for scanner.Scan() { + if err := scanner.Err(); err != nil { + return env, err + } + line := strings.TrimSpace(scanner.Text()) if firstLine { diff --git a/gotenv_test.go b/gotenv_test.go index cf8401e..dc8b3b9 100644 --- a/gotenv_test.go +++ b/gotenv_test.go @@ -2,6 +2,8 @@ package gotenv_test import ( "bufio" + "errors" + "io" "os" "strings" "testing" @@ -240,6 +242,19 @@ func TestStrictParse(t *testing.T) { } } +type failingReader struct { + io.Reader +} + +func (fr failingReader) Read(p []byte) (n int, err error) { + return 0, errors.New("you shall not read") +} + +func TestStrictParse_PassThroughErrors(t *testing.T) { + _, err := gotenv.StrictParse(&failingReader{}) + assert.Error(t, err) +} + func TestRead(t *testing.T) { for _, tt := range fixtures { env, err := gotenv.Read(tt.filename)