From deb665c65e077939204ad97eb1fb389675161fe6 Mon Sep 17 00:00:00 2001 From: xieby1 Date: Tue, 26 May 2026 16:53:40 +0800 Subject: [PATCH] fix: reset INI decoder state on init --- 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 159ca8b4..b6486fa5 100644 --- a/pkg/yqlib/decoder_ini.go +++ b/pkg/yqlib/decoder_ini.go @@ -23,6 +23,7 @@ func NewINIDecoder() 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 d73a46d1..68f838a8 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" @@ -175,6 +176,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)