github.com/u-root/u-root@v7.0.1-0.20200915234505-ad7babab0a8e+incompatible/pkg/uefivars/boot/fuzz_test.go (about) 1 // Copyright 2020 the u-root Authors. All rights reserved 2 // Use of this source code is governed by a BSD-style 3 // license that can be found in the LICENSE file. 4 // 5 // SPDX-License-Identifier: BSD-3-Clause 6 // 7 8 package boot 9 10 import ( 11 "archive/zip" 12 "fmt" 13 "io/ioutil" 14 "log" 15 "os" 16 "strings" 17 "testing" 18 ) 19 20 // Tests using input from fuzzing runs. Ignores any errors, just checks that the 21 // inputs do not cause crashes. 22 // 23 // To update the input zip after a fuzzing run: 24 // cd fuzz/corpus 25 // zip ../../testdata/fuzz_in.zip * 26 // 27 // Similarly, the zip can be extracted to use as input corpus. See fuzz.go for 28 // go-fuzz instructions. 29 func TestFuzzInputs(t *testing.T) { 30 if testing.CoverMode() != "" { 31 // NOTE - since this test doesn't validate the outputs, coverage from 32 // it is very low value, essentially inflating the coverage numbers. 33 t.Skip("this test will inflate coverage") 34 } 35 //restore log behavior at end 36 logOut := log.Writer() 37 defer log.SetOutput(logOut) 38 39 //no logging output for this test, to increase speed 40 null, err := os.OpenFile("/dev/null", os.O_WRONLY, 0200) 41 if err != nil { 42 panic(err) 43 } 44 log.SetOutput(null) 45 log.SetFlags(0) 46 47 z, err := zip.OpenReader("testdata/fuzz_in.zip") 48 if err != nil { 49 t.Error(err) 50 } 51 defer z.Close() 52 for i, zf := range z.File { 53 name := fmt.Sprintf("%03d_%s", i, zf.Name[:10]) 54 t.Run(name, func(t *testing.T) { 55 f, err := zf.Open() 56 if err != nil { 57 t.Error(err) 58 } 59 data, err := ioutil.ReadAll(f) 60 if err != nil { 61 t.Error(err) 62 } 63 //ignore any errors - just catch crashes 64 list, err := ParseFilePathList(data) 65 if err != nil { 66 return 67 } 68 _ = list.String() 69 for _, p := range list { 70 r, err := p.Resolver() 71 if err == nil { 72 _ = r.String() 73 } 74 if strings.Contains(strings.ToLower(p.String()), "acpi") { 75 t.Logf("acpi: %s ", p.String()) 76 } 77 } 78 }) 79 } 80 }