Sanitize strings in table output (#4466)

This commit is contained in:
Robert Kaussow 2024-11-26 22:15:26 +01:00 committed by GitHub
parent 7109f3c6d1
commit 7cedda7387
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 14 additions and 8 deletions

View file

@ -147,12 +147,12 @@ func (o *Table) Write(columns []string, obj any) error {
colName := strings.ToLower(col) colName := strings.ToLower(col)
if alias, ok := o.fieldAlias[colName]; ok { if alias, ok := o.fieldAlias[colName]; ok {
if fn, ok := o.fieldMapping[alias]; ok { if fn, ok := o.fieldMapping[alias]; ok {
out = append(out, fn(obj)) out = append(out, sanitizeString(fn(obj)))
continue continue
} }
} }
if fn, ok := o.fieldMapping[colName]; ok { if fn, ok := o.fieldMapping[colName]; ok {
out = append(out, fn(obj)) out = append(out, sanitizeString(fn(obj)))
continue continue
} }
if value, ok := dataL[strings.ReplaceAll(colName, "_", "")]; ok { if value, ok := dataL[strings.ReplaceAll(colName, "_", "")]; ok {
@ -165,10 +165,10 @@ func (o *Table) Write(columns []string, obj any) error {
continue continue
} }
if s, ok := value.(string); ok { if s, ok := value.(string); ok {
out = append(out, NA(s)) out = append(out, NA(sanitizeString(s)))
continue continue
} }
out = append(out, fmt.Sprintf("%v", value)) out = append(out, sanitizeString(value))
} }
} }
_, _ = fmt.Fprintln(o.w, strings.Join(out, "\t")) _, _ = fmt.Fprintln(o.w, strings.Join(out, "\t"))
@ -201,3 +201,9 @@ func fieldName(name string) string {
} }
return string(out) return string(out)
} }
func sanitizeString(value any) string {
str := fmt.Sprintf("%v", value)
replacer := strings.NewReplacer("\n", " ", "\r", " ")
return strings.TrimSpace(replacer.Replace(str))
}

View file

@ -23,7 +23,7 @@ func TestPipelineOutput(t *testing.T) {
{ {
name: "table output with default columns", name: "table output with default columns",
args: []string{}, args: []string{},
expected: "NUMBER STATUS EVENT BRANCH MESSAGE AUTHOR\n1 success push main message John Doe\n", expected: "NUMBER STATUS EVENT BRANCH MESSAGE AUTHOR\n1 success push main message multiline John Doe\n",
}, },
{ {
name: "table output with custom columns", name: "table output with custom columns",
@ -33,7 +33,7 @@ func TestPipelineOutput(t *testing.T) {
{ {
name: "table output with no header", name: "table output with no header",
args: []string{"output", "--output-no-headers"}, args: []string{"output", "--output-no-headers"},
expected: "1 success push main message John Doe\n", expected: "1 success push main message multiline John Doe\n",
}, },
{ {
name: "go-template output", name: "go-template output",
@ -53,8 +53,8 @@ func TestPipelineOutput(t *testing.T) {
Status: "success", Status: "success",
Event: "push", Event: "push",
Branch: "main", Branch: "main",
Message: "message", Message: "message\nmultiline",
Author: "John Doe", Author: "John Doe\n",
}, },
} }