我正在寻找一种通过模糊测试测试固定长度字符串的有效方法(这样只有字符串的内容是可变的,而不是长度)。 我的第一个想法是使用数组来实现这样的
f.Fuzz(func(t *testing.T, stringUnderTest [8]byte))
遗憾的是,这不起作用,因为不支持数组(https://go.dev/security/fuzz/)。 有没有办法告诉模糊器:“这个字符串只有 8 位数字”?
您可以将多个机器字翻译为字节序列。
func wordsToBytes(words ...uint64) []byte {
buf := make([]byte, 8*len(words))
for n, v := range words {
for i := range 8 {
buf[n+i] = byte(v >> i * 8)
}
}
return buf
}
然后你的模糊目标可以接受几个 uint64 并将其转换为字节。
func FuzzFoo(f *testing.F) {
f.Fuzz(func(t *testing.T, w1 uint64, w2 uint64) {
raw := wordsToBytes(w1, w2)