From ecfdab83b852f9ca9087a9e5564c5fd9fd668ee9 Mon Sep 17 00:00:00 2001 From: Sergey Matveev Date: Fri, 11 Jul 2025 12:43:52 +0300 Subject: [PATCH] Safer multiline strings --- cmd/gorecsel/main.go | 4 ++-- field.go | 4 ++-- go.mod | 4 ++-- r.go | 4 ++-- slog/handler.go | 18 +++++++++--------- slog/handler_test.go | 2 +- w.go | 6 ++---- 7 files changed, 20 insertions(+), 22 deletions(-) diff --git a/cmd/gorecsel/main.go b/cmd/gorecsel/main.go index 2266292..c5a16fd 100644 --- a/cmd/gorecsel/main.go +++ b/cmd/gorecsel/main.go @@ -5,7 +5,7 @@ import ( "io" "os" - "go.cypherpunks.su/recfile/v2" + "go.cypherpunks.su/recfile/v3" ) func main() { @@ -24,7 +24,7 @@ func main() { } fmt.Println("Record:", n) for _, field := range fields { - fmt.Printf("%s: %s\n", field.Name, field.Value) + fmt.Printf("%s: %s\n", field.F, field.V) } n++ } diff --git a/field.go b/field.go index 1009ed1..57369d0 100644 --- a/field.go +++ b/field.go @@ -17,6 +17,6 @@ package recfile type Field struct { - Name string - Value string + F string + V string } diff --git a/go.mod b/go.mod index 848fe24..c0b0cab 100644 --- a/go.mod +++ b/go.mod @@ -1,3 +1,3 @@ -module go.cypherpunks.su/recfile/v2 +module go.cypherpunks.su/recfile/v3 -go 1.21 +go 1.24 diff --git a/r.go b/r.go index fd93669..4f88447 100644 --- a/r.go +++ b/r.go @@ -151,7 +151,7 @@ func (r *Reader) NextMap() (map[string]string, error) { } m := make(map[string]string, len(fields)) for _, f := range fields { - m[f.Name] = f.Value + m[f.F] = f.V } return m, nil } @@ -164,7 +164,7 @@ func (r *Reader) NextMapWithSlice() (map[string][]string, error) { } m := make(map[string][]string) for _, f := range fields { - m[f.Name] = append(m[f.Name], f.Value) + m[f.F] = append(m[f.F], f.V) } return m, nil } diff --git a/slog/handler.go b/slog/handler.go index 8cee4a2..900b203 100644 --- a/slog/handler.go +++ b/slog/handler.go @@ -23,7 +23,7 @@ import ( "sync" "time" - "go.cypherpunks.su/recfile/v2" + "go.cypherpunks.su/recfile/v3" ) type RecfileHandler struct { @@ -88,15 +88,15 @@ func writeValue(w *recfile.Writer, group string, attr slog.Attr) (err error) { multiline, ok := attr.Value.Any().([]string) if ok { if len(multiline) > 0 { - _, err = w.WriteFieldMultiline(group+attr.Key, multiline) + _, err = w.WriteField(group+attr.Key, multiline) return } return } } _, err = w.WriteFields(recfile.Field{ - Name: group + attr.Key, - Value: attr.Value.String(), + F: group + attr.Key, + V: attr.Value.String(), }) return } @@ -111,17 +111,17 @@ func (h *RecfileHandler) Handle(ctx context.Context, rec slog.Record) (err error var fields []recfile.Field if h.LevelKey != "" { fields = append(fields, recfile.Field{ - Name: h.LevelKey, - Value: rec.Level.String(), + F: h.LevelKey, + V: rec.Level.String(), }) } if h.TimeKey != "" { fields = append(fields, recfile.Field{ - Name: h.TimeKey, - Value: rec.Time.UTC().Format(time.RFC3339Nano), + F: h.TimeKey, + V: rec.Time.UTC().Format(time.RFC3339Nano), }) } - fields = append(fields, recfile.Field{Name: h.MsgKey, Value: rec.Message}) + fields = append(fields, recfile.Field{F: h.MsgKey, V: rec.Message}) _, err = w.WriteFields(fields...) if err != nil { return diff --git a/slog/handler_test.go b/slog/handler_test.go index a90365d..013dd8f 100644 --- a/slog/handler_test.go +++ b/slog/handler_test.go @@ -22,7 +22,7 @@ import ( "testing" "time" - "go.cypherpunks.su/recfile/v2" + "go.cypherpunks.su/recfile/v3" ) func TestBasic(t *testing.T) { diff --git a/w.go b/w.go index 6b447f2..15db009 100644 --- a/w.go +++ b/w.go @@ -38,9 +38,7 @@ func backslashSpace(s string) string { func (w *Writer) WriteFields(fs ...Field) (written int, err error) { var n int for _, f := range fs { - n, err = w.w.WriteString( - f.Name + ": " + backslashSpace(strings.TrimLeft(f.Value, " ")) + "\n", - ) + n, err = w.WriteField(f.F, strings.Split(f.V, "\n")) written += n if err != nil { return @@ -49,7 +47,7 @@ func (w *Writer) WriteFields(fs ...Field) (written int, err error) { return } -func (w *Writer) WriteFieldMultiline(name string, lines []string) (written int, err error) { +func (w *Writer) WriteField(name string, lines []string) (written int, err error) { var n int n, err = w.w.WriteString( name + ": " + backslashSpace(strings.TrimLeft(lines[0], " ")) + "\n", -- 2.50.0