whatcanGOwrong
This commit is contained in:
@@ -0,0 +1,81 @@
|
||||
//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.
|
||||
})
|
||||
}
|
||||
Reference in New Issue
Block a user