whatcanGOwrong
This commit is contained in:
@@ -0,0 +1,80 @@
|
||||
package btf
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"encoding/binary"
|
||||
"fmt"
|
||||
"io"
|
||||
"testing"
|
||||
|
||||
"github.com/cilium/ebpf/internal"
|
||||
)
|
||||
|
||||
func FuzzSpec(f *testing.F) {
|
||||
var buf bytes.Buffer
|
||||
err := binary.Write(&buf, internal.NativeEndian, &btfHeader{
|
||||
Magic: btfMagic,
|
||||
Version: 1,
|
||||
HdrLen: uint32(binary.Size(btfHeader{})),
|
||||
})
|
||||
if err != nil {
|
||||
f.Fatal(err)
|
||||
}
|
||||
f.Add(buf.Bytes())
|
||||
f.Fuzz(func(t *testing.T, data []byte) {
|
||||
if len(data) < binary.Size(btfHeader{}) {
|
||||
t.Skip("data is too short")
|
||||
}
|
||||
|
||||
spec, err := loadRawSpec(bytes.NewReader(data), internal.NativeEndian, nil)
|
||||
if err != nil {
|
||||
if spec != nil {
|
||||
t.Fatal("spec is not nil")
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
if spec == nil {
|
||||
t.Fatal("spec is nil")
|
||||
}
|
||||
|
||||
for _, typ := range spec.types {
|
||||
fmt.Fprintf(io.Discard, "%+10v", typ)
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
func FuzzExtInfo(f *testing.F) {
|
||||
var buf bytes.Buffer
|
||||
err := binary.Write(&buf, internal.NativeEndian, &btfExtHeader{
|
||||
Magic: btfMagic,
|
||||
Version: 1,
|
||||
HdrLen: uint32(binary.Size(btfExtHeader{})),
|
||||
})
|
||||
if err != nil {
|
||||
f.Fatal(err)
|
||||
}
|
||||
f.Add(buf.Bytes(), []byte("\x00foo\x00barfoo\x00"))
|
||||
|
||||
emptySpec := newSpec()
|
||||
|
||||
f.Fuzz(func(t *testing.T, data, strings []byte) {
|
||||
if len(data) < binary.Size(btfExtHeader{}) {
|
||||
t.Skip("data is too short")
|
||||
}
|
||||
|
||||
table, err := readStringTable(bytes.NewReader(strings), nil)
|
||||
if err != nil {
|
||||
t.Skip("invalid string table")
|
||||
}
|
||||
|
||||
info, err := loadExtInfos(bytes.NewReader(data), internal.NativeEndian, emptySpec, table)
|
||||
if err != nil {
|
||||
if info != nil {
|
||||
t.Fatal("info is not nil")
|
||||
}
|
||||
} else if info == nil {
|
||||
t.Fatal("info is nil")
|
||||
}
|
||||
})
|
||||
}
|
||||
Reference in New Issue
Block a user