Golang 模糊测试固定长度字符串

问题描述 投票:0回答:1

我正在寻找一种通过模糊测试测试固定长度字符串的有效方法(这样只有字符串的内容是可变的,而不是长度)。 我的第一个想法是使用数组来实现这样的

f.Fuzz(func(t *testing.T, stringUnderTest [8]byte))

遗憾的是,这不起作用,因为不支持数组(https://go.dev/security/fuzz/)。 有没有办法告诉模糊器:“这个字符串只有 8 位数字”?

go fuzzing
1个回答
0
投票

您可以将多个机器字翻译为字节序列。

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)
© www.soinside.com 2019 - 2024. All rights reserved.