Source file
src/debug/elf/fuzz_test.go
1
2
3
4
5 package elf_test
6
7 import (
8 "bytes"
9 "compress/gzip"
10 "debug/elf"
11 "io"
12 "os"
13 "path/filepath"
14 "testing"
15 )
16
17 func FuzzReader(f *testing.F) {
18 if testing.Short() {
19 f.Skip("Skipping in short mode")
20 }
21
22 testdata, err := os.ReadDir("testdata")
23 if err != nil {
24 f.Fatalf("failed to read testdata directory: %s", err)
25 }
26 for _, de := range testdata {
27 if de.IsDir() || filepath.Ext(de.Name()) == ".c" {
28 continue
29 }
30 b, err := os.ReadFile(filepath.Join("testdata", de.Name()))
31 if err != nil {
32 f.Fatalf("failed to read testdata: %s", err)
33 }
34 if filepath.Ext(de.Name()) == ".gz" {
35 gz, err := gzip.NewReader(bytes.NewBuffer(b))
36 if err != nil {
37 f.Fatalf("failed to read gzip testdata: %s", err)
38 }
39 b, err = io.ReadAll(gz)
40 if err != nil {
41 f.Fatalf("failed to read gzip testdata: %s", err)
42 }
43 }
44 f.Add(b)
45 }
46
47 f.Fuzz(func(t *testing.T, data []byte) {
48 f, err := elf.NewFile(bytes.NewReader(data))
49 if err != nil {
50 return
51 }
52 defer f.Close()
53 f.DynString(elf.DT_SONAME)
54 f.DynString(elf.DT_RPATH)
55 f.DynValue(elf.DT_FLAGS)
56 f.DynValue(elf.DT_VERNEEDNUM)
57 f.DynamicSymbols()
58 f.DynamicVersionNeeds()
59 f.DynamicVersions()
60 f.ImportedLibraries()
61 f.ImportedSymbols()
62 f.Section(".data")
63 f.Section(".text")
64 f.SectionByType(elf.SHT_GNU_VERSYM)
65 f.Symbols()
66 dw, err := f.DWARF()
67 if err != nil {
68 return
69 }
70 dr := dw.Reader()
71 for {
72 e, _ := dr.Next()
73 if e == nil {
74 break
75 }
76 }
77 })
78 }
79
View as plain text