Changed `matcher.Matches(file)` to `matcher.MatchesOrParentMatches(file)`:
cli/command/image/build/context.go:95:9: SA1019: matcher.Matches is deprecated: This implementation is buggy (it only checks a single parent dir against the pattern) and will be removed soon. Use either MatchesOrParentMatches or MatchesUsingParentResults instead. (staticcheck)
return matcher.Matches(file)
^
And updated a test to match the JSON omitting empty RootFS.Type fields (in
practice, this field should never be empty in real situations, and always
be "layer"). Changed the test to use subtests to easier find which case
is failing.
full diff: 343665850e...83b51522df
Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
103 lines
3.0 KiB
Go
103 lines
3.0 KiB
Go
// Copyright 2019+ Klaus Post. All rights reserved.
|
|
// License information can be found in the LICENSE file.
|
|
// Based on work by Yann Collet, released under BSD License.
|
|
|
|
package zstd
|
|
|
|
import (
|
|
"errors"
|
|
"runtime"
|
|
)
|
|
|
|
// DOption is an option for creating a decoder.
|
|
type DOption func(*decoderOptions) error
|
|
|
|
// options retains accumulated state of multiple options.
|
|
type decoderOptions struct {
|
|
lowMem bool
|
|
concurrent int
|
|
maxDecodedSize uint64
|
|
maxWindowSize uint64
|
|
dicts []dict
|
|
}
|
|
|
|
func (o *decoderOptions) setDefault() {
|
|
*o = decoderOptions{
|
|
// use less ram: true for now, but may change.
|
|
lowMem: true,
|
|
concurrent: runtime.GOMAXPROCS(0),
|
|
maxWindowSize: MaxWindowSize,
|
|
}
|
|
o.maxDecodedSize = 1 << 63
|
|
}
|
|
|
|
// WithDecoderLowmem will set whether to use a lower amount of memory,
|
|
// but possibly have to allocate more while running.
|
|
func WithDecoderLowmem(b bool) DOption {
|
|
return func(o *decoderOptions) error { o.lowMem = b; return nil }
|
|
}
|
|
|
|
// WithDecoderConcurrency will set the concurrency,
|
|
// meaning the maximum number of decoders to run concurrently.
|
|
// The value supplied must be at least 1.
|
|
// By default this will be set to GOMAXPROCS.
|
|
func WithDecoderConcurrency(n int) DOption {
|
|
return func(o *decoderOptions) error {
|
|
if n <= 0 {
|
|
return errors.New("concurrency must be at least 1")
|
|
}
|
|
o.concurrent = n
|
|
return nil
|
|
}
|
|
}
|
|
|
|
// WithDecoderMaxMemory allows to set a maximum decoded size for in-memory
|
|
// non-streaming operations or maximum window size for streaming operations.
|
|
// This can be used to control memory usage of potentially hostile content.
|
|
// Maximum and default is 1 << 63 bytes.
|
|
func WithDecoderMaxMemory(n uint64) DOption {
|
|
return func(o *decoderOptions) error {
|
|
if n == 0 {
|
|
return errors.New("WithDecoderMaxMemory must be at least 1")
|
|
}
|
|
if n > 1<<63 {
|
|
return errors.New("WithDecoderMaxmemory must be less than 1 << 63")
|
|
}
|
|
o.maxDecodedSize = n
|
|
return nil
|
|
}
|
|
}
|
|
|
|
// WithDecoderDicts allows to register one or more dictionaries for the decoder.
|
|
// If several dictionaries with the same ID is provided the last one will be used.
|
|
func WithDecoderDicts(dicts ...[]byte) DOption {
|
|
return func(o *decoderOptions) error {
|
|
for _, b := range dicts {
|
|
d, err := loadDict(b)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
o.dicts = append(o.dicts, *d)
|
|
}
|
|
return nil
|
|
}
|
|
}
|
|
|
|
// WithDecoderMaxWindow allows to set a maximum window size for decodes.
|
|
// This allows rejecting packets that will cause big memory usage.
|
|
// The Decoder will likely allocate more memory based on the WithDecoderLowmem setting.
|
|
// If WithDecoderMaxMemory is set to a lower value, that will be used.
|
|
// Default is 512MB, Maximum is ~3.75 TB as per zstandard spec.
|
|
func WithDecoderMaxWindow(size uint64) DOption {
|
|
return func(o *decoderOptions) error {
|
|
if size < MinWindowSize {
|
|
return errors.New("WithMaxWindowSize must be at least 1KB, 1024 bytes")
|
|
}
|
|
if size > (1<<41)+7*(1<<38) {
|
|
return errors.New("WithMaxWindowSize must be less than (1<<41) + 7*(1<<38) ~ 3.75TB")
|
|
}
|
|
o.maxWindowSize = size
|
|
return nil
|
|
}
|
|
}
|