//go:build go1.18 // +build go1.18 package toml import ( "bytes" "testing" ) func FuzzDecode(f *testing.F) { buf := make([]byte, 0, 2048) f.Add(` # This is an example TOML document which shows most of its features. # Simple key/value with a string. title = "TOML example \U0001F60A" desc = """ An example TOML document. \ """ # Array with integers and floats in the various allowed formats. integers = [42, 0x42, 0o42, 0b0110] floats = [1.42, 1e-02] # Array with supported datetime formats. times = [ 2021-11-09T15:16:17+01:00, # datetime with timezone. 2021-11-09T15:16:17Z, # UTC datetime. 2021-11-09T15:16:17, # local datetime. 2021-11-09, # local date. 15:16:17, # local time. ] # Durations. duration = ["4m49s", "8m03s", "1231h15m55s"] # Table with inline tables. distros = [ {name = "Arch Linux", packages = "pacman"}, {name = "Void Linux", packages = "xbps"}, {name = "Debian", packages = "apt"}, ] # Create new table; note the "servers" table is created implicitly. [servers.alpha] # You can indent as you please, tabs or spaces. ip = '10.0.0.1' hostname = 'server1' enabled = false [servers.beta] ip = '10.0.0.2' hostname = 'server2' enabled = true # Start a new table array; note that the "characters" table is created implicitly. [[characters.star-trek]] name = "James Kirk" rank = "Captain\u0012 \t" [[characters.star-trek]] name = "Spock" rank = "Science officer" [undecoded] # To show the MetaData.Undecoded() feature. key = "This table intentionally left undecoded" `) f.Fuzz(func(t *testing.T, file string) { var m map[string]interface{} _, err := Decode(file, &m) if err != nil { t.Skip() } NewEncoder(bytes.NewBuffer(buf)).Encode(m) // TODO: should check if the output is equal to the input, too, but some // information is lost when encoding. }) }