summaryrefslogtreecommitdiff
path: root/kernel
diff options
authorMichael Vogt <mvo@ubuntu.com>2020-08-20 13:11:12 +0200
committerMichael Vogt <mvo@ubuntu.com>2020-08-20 13:11:12 +0200
commita0f21fa8fcc6c77e1c6658f5ac0a55bff19eda7a (patch)
tree6835fd165c5fcc49b3dc2baca0508a5dc2137c9c /kernel
parentd99e0922e66fe37a45247a4f672cf6a249841467 (diff)
parent698bc0163d770db7c79153e7e6580c2142f43d4a (diff)
Merge remote-tracking branch 'upstream/master' into kernel-validate
Diffstat (limited to 'kernel')
-rw-r--r--kernel/kernel.go10
-rw-r--r--kernel/kernel_test.go11
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)