// Copyright 2019 The Go Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. //go:build gofuzz package csv import ( "bytes" "fmt" "reflect" ) func Fuzz(data []byte) int { score := 0 buf := new(bytes.Buffer) for _, tt := range []Reader{ {}, {Comma: ';'}, {Comma: '\t'}, {LazyQuotes: true}, {TrimLeadingSpace: true}, {Comment: '#'}, {Comment: ';'}, } { r := NewReader(bytes.NewReader(data)) r.Comma = tt.Comma r.Comment = tt.Comment r.LazyQuotes = tt.LazyQuotes r.TrimLeadingSpace = tt.TrimLeadingSpace records, err := r.ReadAll() if err != nil { continue } score = 1 buf.Reset() w := NewWriter(buf) w.Comma = tt.Comma err = w.WriteAll(records) if err != nil { fmt.Printf("writer = %#v\n", w) fmt.Printf("records = %v\n", records) panic(err) } r = NewReader(buf) r.Comma = tt.Comma r.Comment = tt.Comment r.LazyQuotes = tt.LazyQuotes r.TrimLeadingSpace = tt.TrimLeadingSpace result, err := r.ReadAll() if err != nil { fmt.Printf("reader = %#v\n", r) fmt.Printf("records = %v\n", records) panic(err) } if !reflect.DeepEqual(records, result) { fmt.Println("records = \n", records) fmt.Println("result = \n", records) panic("not equal") } } return score }