Giant blob of minor changes
[dotfiles/.git] / .config / coc / extensions / coc-go-data / tools / pkg / mod / honnef.co / go / tools@v0.0.1-2020.1.5 / pattern / fuzz.go
1 // +build gofuzz
2
3 package pattern
4
5 import (
6         "go/ast"
7         goparser "go/parser"
8         "go/token"
9         "os"
10         "path/filepath"
11         "strings"
12 )
13
14 var files []*ast.File
15
16 func init() {
17         fset := token.NewFileSet()
18         filepath.Walk("/usr/lib/go/src", func(path string, info os.FileInfo, err error) error {
19                 if err != nil {
20                         // XXX error handling
21                         panic(err)
22                 }
23                 if !strings.HasSuffix(path, ".go") {
24                         return nil
25                 }
26                 f, err := goparser.ParseFile(fset, path, nil, 0)
27                 if err != nil {
28                         return nil
29                 }
30                 files = append(files, f)
31                 return nil
32         })
33 }
34
35 func Fuzz(data []byte) int {
36         p := &Parser{}
37         pat, err := p.Parse(string(data))
38         if err != nil {
39                 if strings.Contains(err.Error(), "internal error") {
40                         panic(err)
41                 }
42                 return 0
43         }
44         _ = pat.Root.String()
45
46         for _, f := range files {
47                 Match(pat.Root, f)
48         }
49         return 1
50 }