From 7620a727b59899b2e42c57868482a0658a392038 Mon Sep 17 00:00:00 2001 From: Xie Benyi Date: Sat, 6 Jun 2026 14:21:13 +0800 Subject: [PATCH] fix: reset INI decoder state on init (#2719) --- pkg/yqlib/decoder_ini.go | 1 + pkg/yqlib/ini_test.go | 16 ++++++++++++++++ 2 files changed, 17 insertions(+) diff --git a/pkg/yqlib/decoder_ini.go b/pkg/yqlib/decoder_ini.go index e536edb2..2c1a5db8 100644 --- a/pkg/yqlib/decoder_ini.go +++ b/pkg/yqlib/decoder_ini.go @@ -25,6 +25,7 @@ func NewINIDecoder(prefs INIPreferences) Decoder { func (dec *iniDecoder) Init(reader io.Reader) error { // Store the reader for use in Decode dec.reader = reader + dec.finished = false return nil } diff --git a/pkg/yqlib/ini_test.go b/pkg/yqlib/ini_test.go index e3ad2ef1..ce35e18a 100644 --- a/pkg/yqlib/ini_test.go +++ b/pkg/yqlib/ini_test.go @@ -5,6 +5,7 @@ package yqlib import ( "bufio" "fmt" + "strings" "testing" "github.com/mikefarah/yq/v4/test" @@ -201,6 +202,21 @@ func documentDecodeErrorINIScenario(w *bufio.Writer, s formatScenario) { writeOrPanic(w, fmt.Sprintf("```\n%v\n```\n\n", s.expectedError)) } +func TestINIDecoderInitResetsFinished(t *testing.T) { + decoder := NewINIDecoder() + firstDocuments, err := readDocuments(strings.NewReader("[first]\nkey = value\n"), "first.ini", 0, decoder) + if err != nil { + t.Fatal(err) + } + test.AssertResult(t, 1, firstDocuments.Len()) + + secondDocuments, err := readDocuments(strings.NewReader("[second]\nkey = value\n"), "second.ini", 1, decoder) + if err != nil { + t.Fatal(err) + } + test.AssertResult(t, 1, secondDocuments.Len()) +} + func TestINIScenarios(t *testing.T) { for _, tt := range iniScenarios { testINIScenario(t, tt)