github.com/u-root/u-root@v7.0.1-0.20200915234505-ad7babab0a8e+incompatible/pkg/uefivars/boot/fuzz.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  // +build gofuzz
     9  
    10  package boot
    11  
    12  import (
    13  	"log"
    14  	"os"
    15  )
    16  
    17  /*
    18  go get github.com/dvyukov/go-fuzz/go-fuzz
    19  go get github.com/dvyukov/go-fuzz/go-fuzz-build
    20  
    21  go-fuzz-build -func FuzzParseFilePathList github.com/u-root/u-root/pkg/uefivars/boot
    22  go-fuzz -bin=./boot-fuzz.zip -workdir=fuzz
    23  ...
    24  */
    25  
    26  var tmpdir = "/tmp/fuzz-resolve-workdir"
    27  
    28  func init() {
    29  	//divert logging - greatly increases exec speed
    30  	null, err := os.OpenFile("/dev/null", os.O_WRONLY, 0200)
    31  	if err != nil {
    32  		panic(err)
    33  	}
    34  	log.SetOutput(null)
    35  	log.SetFlags(0)
    36  
    37  	err = os.MkdirAll(tmpdir, 0755)
    38  	if err != nil {
    39  		panic(err)
    40  	}
    41  }
    42  
    43  func FuzzParseFilePathList(data []byte) int {
    44  	list, err := ParseFilePathList(data)
    45  	if err != nil {
    46  		return 0
    47  	}
    48  	_ = list.String()
    49  	for _, p := range list {
    50  		r, err := p.Resolver()
    51  		if err != nil {
    52  			continue
    53  		}
    54  		_ = r.String()
    55  		_ = r.BlockInfo()
    56  		_, _ = r.Resolve(tmpdir)
    57  	}
    58  	return 1
    59  }