diff --git a/util/buildflags/attests.go b/util/buildflags/attests.go index e0fe1e2f..54997307 100644 --- a/util/buildflags/attests.go +++ b/util/buildflags/attests.go @@ -148,9 +148,8 @@ func (a *Attest) UnmarshalText(text []byte) error { if !ok { return errors.Errorf("invalid value %s", field) } - key = strings.TrimSpace(strings.ToLower(key)) - switch key { + switch strings.TrimSpace(strings.ToLower(key)) { case "type": a.Type = value case "disabled": diff --git a/util/buildflags/export.go b/util/buildflags/export.go index ba364c9f..8460d3e2 100644 --- a/util/buildflags/export.go +++ b/util/buildflags/export.go @@ -1,6 +1,7 @@ package buildflags import ( + "encoding/csv" "encoding/json" "maps" "regexp" @@ -259,9 +260,18 @@ func (w *csvBuilder) Write(key, value string) { if w.sb.Len() > 0 { w.sb.WriteByte(',') } - w.sb.WriteString(key) - w.sb.WriteByte('=') - w.sb.WriteString(value) + + pair := key + "=" + value + if strings.ContainsRune(pair, ',') || strings.ContainsRune(pair, '"') { + var attr strings.Builder + writer := csv.NewWriter(&attr) + writer.Write([]string{pair}) + writer.Flush() + // Strips the extra newline added by the csv writer + pair = strings.TrimSpace(attr.String()) + } + + w.sb.WriteString(pair) } func (w *csvBuilder) WriteAttributes(attrs map[string]string) {