diff options
| author | Michael Vogt <mvo@ubuntu.com> | 2020-08-20 13:11:12 +0200 |
|---|---|---|
| committer | Michael Vogt <mvo@ubuntu.com> | 2020-08-20 13:11:12 +0200 |
| commit | a0f21fa8fcc6c77e1c6658f5ac0a55bff19eda7a (patch) | |
| tree | 6835fd165c5fcc49b3dc2baca0508a5dc2137c9c /kernel | |
| parent | d99e0922e66fe37a45247a4f672cf6a249841467 (diff) | |
| parent | 698bc0163d770db7c79153e7e6580c2142f43d4a (diff) | |
Merge remote-tracking branch 'upstream/master' into kernel-validate
Diffstat (limited to 'kernel')
| -rw-r--r-- | kernel/kernel.go | 10 | ||||
| -rw-r--r-- | kernel/kernel_test.go | 11 |
2 files changed, 20 insertions, 1 deletions
diff --git a/kernel/kernel.go b/kernel/kernel.go index 5f622ebb34..2367650b36 100644 --- a/kernel/kernel.go +++ b/kernel/kernel.go @@ -24,6 +24,7 @@ import ( "io/ioutil" "os" "path/filepath" + "regexp" "gopkg.in/yaml.v2" @@ -39,6 +40,9 @@ type Info struct { Assets map[string]*Asset `yaml:"assets,omitempty"` } +// XXX: should we be more liberal? start conservative +var validAssetName = regexp.MustCompile("^[a-zA-Z0-9]+$") + // InfoFromKernelYaml reads the provided kernel metadata. func InfoFromKernelYaml(kernelYaml []byte) (*Info, error) { var ki Info @@ -47,7 +51,11 @@ func InfoFromKernelYaml(kernelYaml []byte) (*Info, error) { return nil, fmt.Errorf("cannot parse kernel metadata: %v", err) } - // XXX: validate that the assets are actually there + for name := range ki.Assets { + if !validAssetName.MatchString(name) { + return nil, fmt.Errorf("invalid asset name %q, please use only alphanumeric characters", name) + } + } return &ki, nil } diff --git a/kernel/kernel_test.go b/kernel/kernel_test.go index 0db743e269..3a98b17788 100644 --- a/kernel/kernel_test.go +++ b/kernel/kernel_test.go @@ -63,12 +63,23 @@ assets: - dtbs/bcm2836-rpi-2-b.dtb `) +var mockInvalidKernelYaml = []byte(` +assets: + non-alphanumeric: +`) + func (s *kernelYamlTestSuite) TestInfoFromKernelYamlSad(c *C) { ki, err := kernel.InfoFromKernelYaml([]byte("foo")) c.Check(err, ErrorMatches, "(?m)cannot parse kernel metadata: .*") c.Check(ki, IsNil) } +func (s *kernelYamlTestSuite) TestInfoFromKernelYamlBadName(c *C) { + ki, err := kernel.InfoFromKernelYaml(mockInvalidKernelYaml) + c.Check(err, ErrorMatches, `invalid asset name "non-alphanumeric", please use only alphanumeric characters`) + c.Check(ki, IsNil) +} + func (s *kernelYamlTestSuite) TestInfoFromKernelYamlHappy(c *C) { ki, err := kernel.InfoFromKernelYaml(mockKernelYaml) c.Check(err, IsNil) |
