From 496258c6633e674d209f154faee7b2402b8f1101 Mon Sep 17 00:00:00 2001 From: Mike Farah Date: Thu, 20 Aug 2026 15:14:34 +1000 Subject: [PATCH] Clamp YAML indent and close dumper after encoding. Clamp indent to the library's 2-9 range, wrap dumper setup errors with %w, and always close the dumper after dump. Co-authored-by: Cursor --- pkg/yqlib/encoder_yaml.go | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/pkg/yqlib/encoder_yaml.go b/pkg/yqlib/encoder_yaml.go index 6a8c259d..8f84edaf 100644 --- a/pkg/yqlib/encoder_yaml.go +++ b/pkg/yqlib/encoder_yaml.go @@ -2,7 +2,6 @@ package yqlib import ( "bytes" - "cmp" "fmt" "io" "strings" @@ -51,26 +50,37 @@ func (ye *yamlEncoder) Encode(writer io.Writer, node *CandidateNode) error { destination = tempBuffer } + indent := ye.prefs.Indent + if indent < 2 { + indent = 2 + } else if indent > 9 { + indent = 9 + } + dumper, err := yaml.NewDumper(destination, yaml.WithV3Defaults(), - yaml.WithIndent(cmp.Or(ye.prefs.Indent, 2)), + yaml.WithIndent(indent), yaml.WithCompactSeqIndent(ye.prefs.CompactSequenceIndent), yaml.WithLineWidth(-1), ) if err != nil { - return fmt.Errorf("configure YAML encoding %#v: %v", ye.prefs, err) + return fmt.Errorf("configure YAML encoding: %w", err) } target, err := node.MarshalYAML() - if err != nil { + _ = dumper.Close() return err } trailingContent := target.FootComment target.FootComment = "" - if err := dumper.Dump(target); err != nil { + err = dumper.Dump(target) + if closeErr := dumper.Close(); err == nil { + err = closeErr + } + if err != nil { return err }