Update dependencies
Signed-off-by: Markus Lehtonen <markus.lehtonen@intel.com>
This commit is contained in:
		
							
								
								
									
										11
									
								
								vendor/github.com/google/gofuzz/.travis.yml
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										11
									
								
								vendor/github.com/google/gofuzz/.travis.yml
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -1,13 +1,10 @@
 | 
			
		||||
language: go
 | 
			
		||||
 | 
			
		||||
go:
 | 
			
		||||
  - 1.4
 | 
			
		||||
  - 1.3
 | 
			
		||||
  - 1.2
 | 
			
		||||
  - tip
 | 
			
		||||
 | 
			
		||||
install:
 | 
			
		||||
  - if ! go get code.google.com/p/go.tools/cmd/cover; then go get golang.org/x/tools/cmd/cover; fi
 | 
			
		||||
  - 1.11.x
 | 
			
		||||
  - 1.12.x
 | 
			
		||||
  - 1.13.x
 | 
			
		||||
  - master
 | 
			
		||||
 | 
			
		||||
script:
 | 
			
		||||
  - go test -cover
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										2
									
								
								vendor/github.com/google/gofuzz/CONTRIBUTING.md
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								vendor/github.com/google/gofuzz/CONTRIBUTING.md
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -1,7 +1,7 @@
 | 
			
		||||
# How to contribute #
 | 
			
		||||
 | 
			
		||||
We'd love to accept your patches and contributions to this project.  There are
 | 
			
		||||
a just a few small guidelines you need to follow.
 | 
			
		||||
just a few small guidelines you need to follow.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
## Contributor License Agreement ##
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										18
									
								
								vendor/github.com/google/gofuzz/README.md
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										18
									
								
								vendor/github.com/google/gofuzz/README.md
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -68,4 +68,22 @@ f.Fuzz(&myObject) // Type will correspond to whether A or B info is set.
 | 
			
		||||
 | 
			
		||||
See more examples in ```example_test.go```.
 | 
			
		||||
 | 
			
		||||
You can use this library for easier [go-fuzz](https://github.com/dvyukov/go-fuzz)ing.
 | 
			
		||||
go-fuzz provides the user a byte-slice, which should be converted to different inputs
 | 
			
		||||
for the tested function. This library can help convert the byte slice. Consider for
 | 
			
		||||
example a fuzz test for a the function `mypackage.MyFunc` that takes an int arguments:
 | 
			
		||||
```go
 | 
			
		||||
// +build gofuzz
 | 
			
		||||
package mypackage
 | 
			
		||||
 | 
			
		||||
import fuzz "github.com/google/gofuzz"
 | 
			
		||||
 | 
			
		||||
func Fuzz(data []byte) int {
 | 
			
		||||
        var i int
 | 
			
		||||
        fuzz.NewFromGoFuzz(data).Fuzz(&i)
 | 
			
		||||
        MyFunc(i)
 | 
			
		||||
        return 0
 | 
			
		||||
}
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
Happy testing!
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										81
									
								
								vendor/github.com/google/gofuzz/bytesource/bytesource.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										81
									
								
								vendor/github.com/google/gofuzz/bytesource/bytesource.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,81 @@
 | 
			
		||||
/*
 | 
			
		||||
Copyright 2014 Google Inc. All rights reserved.
 | 
			
		||||
 | 
			
		||||
Licensed under the Apache License, Version 2.0 (the "License");
 | 
			
		||||
you may not use this file except in compliance with the License.
 | 
			
		||||
You may obtain a copy of the License at
 | 
			
		||||
 | 
			
		||||
    http://www.apache.org/licenses/LICENSE-2.0
 | 
			
		||||
 | 
			
		||||
Unless required by applicable law or agreed to in writing, software
 | 
			
		||||
distributed under the License is distributed on an "AS IS" BASIS,
 | 
			
		||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
			
		||||
See the License for the specific language governing permissions and
 | 
			
		||||
limitations under the License.
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
// Package bytesource provides a rand.Source64 that is determined by a slice of bytes.
 | 
			
		||||
package bytesource
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"bytes"
 | 
			
		||||
	"encoding/binary"
 | 
			
		||||
	"io"
 | 
			
		||||
	"math/rand"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// ByteSource implements rand.Source64 determined by a slice of bytes. The random numbers are
 | 
			
		||||
// generated from each 8 bytes in the slice, until the last bytes are consumed, from which a
 | 
			
		||||
// fallback pseudo random source is created in case more random numbers are required.
 | 
			
		||||
// It also exposes a `bytes.Reader` API, which lets callers consume the bytes directly.
 | 
			
		||||
type ByteSource struct {
 | 
			
		||||
	*bytes.Reader
 | 
			
		||||
	fallback rand.Source
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// New returns a new ByteSource from a given slice of bytes.
 | 
			
		||||
func New(input []byte) *ByteSource {
 | 
			
		||||
	s := &ByteSource{
 | 
			
		||||
		Reader:   bytes.NewReader(input),
 | 
			
		||||
		fallback: rand.NewSource(0),
 | 
			
		||||
	}
 | 
			
		||||
	if len(input) > 0 {
 | 
			
		||||
		s.fallback = rand.NewSource(int64(s.consumeUint64()))
 | 
			
		||||
	}
 | 
			
		||||
	return s
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (s *ByteSource) Uint64() uint64 {
 | 
			
		||||
	// Return from input if it was not exhausted.
 | 
			
		||||
	if s.Len() > 0 {
 | 
			
		||||
		return s.consumeUint64()
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Input was exhausted, return random number from fallback (in this case fallback should not be
 | 
			
		||||
	// nil). Try first having a Uint64 output (Should work in current rand implementation),
 | 
			
		||||
	// otherwise return a conversion of Int63.
 | 
			
		||||
	if s64, ok := s.fallback.(rand.Source64); ok {
 | 
			
		||||
		return s64.Uint64()
 | 
			
		||||
	}
 | 
			
		||||
	return uint64(s.fallback.Int63())
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (s *ByteSource) Int63() int64 {
 | 
			
		||||
	return int64(s.Uint64() >> 1)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (s *ByteSource) Seed(seed int64) {
 | 
			
		||||
	s.fallback = rand.NewSource(seed)
 | 
			
		||||
	s.Reader = bytes.NewReader(nil)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// consumeUint64 reads 8 bytes from the input and convert them to a uint64. It assumes that the the
 | 
			
		||||
// bytes reader is not empty.
 | 
			
		||||
func (s *ByteSource) consumeUint64() uint64 {
 | 
			
		||||
	var bytes [8]byte
 | 
			
		||||
	_, err := s.Read(bytes[:])
 | 
			
		||||
	if err != nil && err != io.EOF {
 | 
			
		||||
		panic("failed reading source") // Should not happen.
 | 
			
		||||
	}
 | 
			
		||||
	return binary.BigEndian.Uint64(bytes[:])
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										137
									
								
								vendor/github.com/google/gofuzz/fuzz.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										137
									
								
								vendor/github.com/google/gofuzz/fuzz.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -22,6 +22,9 @@ import (
 | 
			
		||||
	"reflect"
 | 
			
		||||
	"regexp"
 | 
			
		||||
	"time"
 | 
			
		||||
 | 
			
		||||
	"github.com/google/gofuzz/bytesource"
 | 
			
		||||
	"strings"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// fuzzFuncMap is a map from a type to a fuzzFunc that handles that type.
 | 
			
		||||
@@ -61,6 +64,34 @@ func NewWithSeed(seed int64) *Fuzzer {
 | 
			
		||||
	return f
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// NewFromGoFuzz is a helper function that enables using gofuzz (this
 | 
			
		||||
// project) with go-fuzz (https://github.com/dvyukov/go-fuzz) for continuous
 | 
			
		||||
// fuzzing. Essentially, it enables translating the fuzzing bytes from
 | 
			
		||||
// go-fuzz to any Go object using this library.
 | 
			
		||||
//
 | 
			
		||||
// This implementation promises a constant translation from a given slice of
 | 
			
		||||
// bytes to the fuzzed objects. This promise will remain over future
 | 
			
		||||
// versions of Go and of this library.
 | 
			
		||||
//
 | 
			
		||||
// Note: the returned Fuzzer should not be shared between multiple goroutines,
 | 
			
		||||
// as its deterministic output will no longer be available.
 | 
			
		||||
//
 | 
			
		||||
// Example: use go-fuzz to test the function `MyFunc(int)` in the package
 | 
			
		||||
// `mypackage`. Add the file: "mypacakge_fuzz.go" with the content:
 | 
			
		||||
//
 | 
			
		||||
// // +build gofuzz
 | 
			
		||||
// package mypacakge
 | 
			
		||||
// import fuzz "github.com/google/gofuzz"
 | 
			
		||||
// func Fuzz(data []byte) int {
 | 
			
		||||
// 	var i int
 | 
			
		||||
// 	fuzz.NewFromGoFuzz(data).Fuzz(&i)
 | 
			
		||||
// 	MyFunc(i)
 | 
			
		||||
// 	return 0
 | 
			
		||||
// }
 | 
			
		||||
func NewFromGoFuzz(data []byte) *Fuzzer {
 | 
			
		||||
	return New().RandSource(bytesource.New(data))
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Funcs adds each entry in fuzzFuncs as a custom fuzzing function.
 | 
			
		||||
//
 | 
			
		||||
// Each entry in fuzzFuncs must be a function taking two parameters.
 | 
			
		||||
@@ -141,7 +172,7 @@ func (f *Fuzzer) genElementCount() int {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (f *Fuzzer) genShouldFill() bool {
 | 
			
		||||
	return f.r.Float64() > f.nilChance
 | 
			
		||||
	return f.r.Float64() >= f.nilChance
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// MaxDepth sets the maximum number of recursive fuzz calls that will be made
 | 
			
		||||
@@ -240,6 +271,7 @@ func (fc *fuzzerContext) doFuzz(v reflect.Value, flags uint64) {
 | 
			
		||||
		fn(v, fc.fuzzer.r)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	switch v.Kind() {
 | 
			
		||||
	case reflect.Map:
 | 
			
		||||
		if fc.fuzzer.genShouldFill() {
 | 
			
		||||
@@ -450,10 +482,10 @@ var fillFuncMap = map[reflect.Kind]func(reflect.Value, *rand.Rand){
 | 
			
		||||
		v.SetFloat(r.Float64())
 | 
			
		||||
	},
 | 
			
		||||
	reflect.Complex64: func(v reflect.Value, r *rand.Rand) {
 | 
			
		||||
		panic("unimplemented")
 | 
			
		||||
		v.SetComplex(complex128(complex(r.Float32(), r.Float32())))
 | 
			
		||||
	},
 | 
			
		||||
	reflect.Complex128: func(v reflect.Value, r *rand.Rand) {
 | 
			
		||||
		panic("unimplemented")
 | 
			
		||||
		v.SetComplex(complex(r.Float64(), r.Float64()))
 | 
			
		||||
	},
 | 
			
		||||
	reflect.String: func(v reflect.Value, r *rand.Rand) {
 | 
			
		||||
		v.SetString(randString(r))
 | 
			
		||||
@@ -465,38 +497,105 @@ var fillFuncMap = map[reflect.Kind]func(reflect.Value, *rand.Rand){
 | 
			
		||||
 | 
			
		||||
// randBool returns true or false randomly.
 | 
			
		||||
func randBool(r *rand.Rand) bool {
 | 
			
		||||
	if r.Int()&1 == 1 {
 | 
			
		||||
		return true
 | 
			
		||||
	}
 | 
			
		||||
	return false
 | 
			
		||||
	return r.Int31()&(1<<30) == 0
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type charRange struct {
 | 
			
		||||
	first, last rune
 | 
			
		||||
type int63nPicker interface {
 | 
			
		||||
	Int63n(int64) int64
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// UnicodeRange describes a sequential range of unicode characters.
 | 
			
		||||
// Last must be numerically greater than First.
 | 
			
		||||
type UnicodeRange struct {
 | 
			
		||||
	First, Last rune
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// UnicodeRanges describes an arbitrary number of sequential ranges of unicode characters.
 | 
			
		||||
// To be useful, each range must have at least one character (First <= Last) and
 | 
			
		||||
// there must be at least one range.
 | 
			
		||||
type UnicodeRanges []UnicodeRange
 | 
			
		||||
 | 
			
		||||
// choose returns a random unicode character from the given range, using the
 | 
			
		||||
// given randomness source.
 | 
			
		||||
func (r *charRange) choose(rand *rand.Rand) rune {
 | 
			
		||||
	count := int64(r.last - r.first)
 | 
			
		||||
	return r.first + rune(rand.Int63n(count))
 | 
			
		||||
func (ur UnicodeRange) choose(r int63nPicker) rune {
 | 
			
		||||
	count := int64(ur.Last - ur.First + 1)
 | 
			
		||||
	return ur.First + rune(r.Int63n(count))
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
var unicodeRanges = []charRange{
 | 
			
		||||
// CustomStringFuzzFunc constructs a FuzzFunc which produces random strings.
 | 
			
		||||
// Each character is selected from the range ur. If there are no characters
 | 
			
		||||
// in the range (cr.Last < cr.First), this will panic.
 | 
			
		||||
func (ur UnicodeRange) CustomStringFuzzFunc() func(s *string, c Continue) {
 | 
			
		||||
	ur.check()
 | 
			
		||||
	return func(s *string, c Continue) {
 | 
			
		||||
		*s = ur.randString(c.Rand)
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// check is a function that used to check whether the first of ur(UnicodeRange)
 | 
			
		||||
// is greater than the last one.
 | 
			
		||||
func (ur UnicodeRange) check() {
 | 
			
		||||
	if ur.Last < ur.First {
 | 
			
		||||
		panic("The last encoding must be greater than the first one.")
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// randString of UnicodeRange makes a random string up to 20 characters long.
 | 
			
		||||
// Each character is selected form ur(UnicodeRange).
 | 
			
		||||
func (ur UnicodeRange) randString(r *rand.Rand) string {
 | 
			
		||||
	n := r.Intn(20)
 | 
			
		||||
	sb := strings.Builder{}
 | 
			
		||||
	sb.Grow(n)
 | 
			
		||||
	for i := 0; i < n; i++ {
 | 
			
		||||
		sb.WriteRune(ur.choose(r))
 | 
			
		||||
	}
 | 
			
		||||
	return sb.String()
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// defaultUnicodeRanges sets a default unicode range when user do not set
 | 
			
		||||
// CustomStringFuzzFunc() but wants fuzz string.
 | 
			
		||||
var defaultUnicodeRanges = UnicodeRanges{
 | 
			
		||||
	{' ', '~'},           // ASCII characters
 | 
			
		||||
	{'\u00a0', '\u02af'}, // Multi-byte encoded characters
 | 
			
		||||
	{'\u4e00', '\u9fff'}, // Common CJK (even longer encodings)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// CustomStringFuzzFunc constructs a FuzzFunc which produces random strings.
 | 
			
		||||
// Each character is selected from one of the ranges of ur(UnicodeRanges).
 | 
			
		||||
// Each range has an equal probability of being chosen. If there are no ranges,
 | 
			
		||||
// or a selected range has no characters (.Last < .First), this will panic.
 | 
			
		||||
// Do not modify any of the ranges in ur after calling this function.
 | 
			
		||||
func (ur UnicodeRanges) CustomStringFuzzFunc() func(s *string, c Continue) {
 | 
			
		||||
	// Check unicode ranges slice is empty.
 | 
			
		||||
	if len(ur) == 0 {
 | 
			
		||||
		panic("UnicodeRanges is empty.")
 | 
			
		||||
	}
 | 
			
		||||
	// if not empty, each range should be checked.
 | 
			
		||||
	for i := range ur {
 | 
			
		||||
		ur[i].check()
 | 
			
		||||
	}
 | 
			
		||||
	return func(s *string, c Continue) {
 | 
			
		||||
		*s = ur.randString(c.Rand)
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// randString of UnicodeRanges makes a random string up to 20 characters long.
 | 
			
		||||
// Each character is selected form one of the ranges of ur(UnicodeRanges),
 | 
			
		||||
// and each range has an equal probability of being chosen.
 | 
			
		||||
func (ur UnicodeRanges) randString(r *rand.Rand) string {
 | 
			
		||||
	n := r.Intn(20)
 | 
			
		||||
	sb := strings.Builder{}
 | 
			
		||||
	sb.Grow(n)
 | 
			
		||||
	for i := 0; i < n; i++ {
 | 
			
		||||
		sb.WriteRune(ur[r.Intn(len(ur))].choose(r))
 | 
			
		||||
	}
 | 
			
		||||
	return sb.String()
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// randString makes a random string up to 20 characters long. The returned string
 | 
			
		||||
// may include a variety of (valid) UTF-8 encodings.
 | 
			
		||||
func randString(r *rand.Rand) string {
 | 
			
		||||
	n := r.Intn(20)
 | 
			
		||||
	runes := make([]rune, n)
 | 
			
		||||
	for i := range runes {
 | 
			
		||||
		runes[i] = unicodeRanges[r.Intn(len(unicodeRanges))].choose(r)
 | 
			
		||||
	}
 | 
			
		||||
	return string(runes)
 | 
			
		||||
	return defaultUnicodeRanges.randString(r)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// randUint64 makes random 64 bit numbers.
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user