forked from calmh/ipfix
-
Notifications
You must be signed in to change notification settings - Fork 5
Expand file tree
/
Copy pathparser_fuzz.go
More file actions
70 lines (57 loc) · 1.08 KB
/
parser_fuzz.go
File metadata and controls
70 lines (57 loc) · 1.08 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
//go:build gofuzz
// +build gofuzz
package ipfix
import (
"bytes"
"io"
"os"
"gopkg.in/gcfg.v1"
)
var extra []DictionaryEntry
func init() {
if dictFile := os.Getenv("IPFIXDICT"); dictFile != "" {
var dict UserDictionary
err := gcfg.ReadFileInto(&dict, dictFile)
if err != nil {
panic(err)
}
for name, field := range dict.Field {
extra = append(extra, field.DictionaryEntry(name))
}
}
}
func Fuzz(bs []byte) int {
r := bytes.NewReader(bs)
s := NewSession()
i := NewInterpreter(s)
for _, e := range extra {
i.AddDictionaryEntry(e)
}
msg, err := s.ParseReader(r)
for err == nil {
for _, rec := range msg.DataRecords {
i.Interpret(rec)
}
msg, err = s.ParseReader(r)
}
if err == io.EOF {
return 1
}
return 0
}
type UserDictionary struct {
Field map[string]*Field
}
type Field struct {
ID uint16
Enterprise uint32
Type string
}
func (f Field) DictionaryEntry(name string) DictionaryEntry {
return DictionaryEntry{
Name: name,
EnterpriseID: f.Enterprise,
FieldID: f.ID,
Type: FieldTypes[f.Type],
}
}