Avoid "invalid memory address or nil pointer dereference" panic

libcontainer.GetNamespace returns nil on FreeBSD because
libcontainer.namespaceList is empty. In this case, Namespaces#Get should
return nil instead of being panic.

Docker-DCO-1.1-Signed-off-by: Kato Kazuyoshi <kato.kazuyoshi@gmail.com> (github: kzys)
This commit is contained in:
Kato Kazuyoshi 2014-04-10 22:07:29 +09:00
parent 4b3bfc742b
commit 8dc1d8b6c0
2 changed files with 10 additions and 1 deletions

View file

@ -68,7 +68,7 @@ func (n Namespaces) Contains(ns string) bool {
func (n Namespaces) Get(ns string) *Namespace {
for _, nsp := range n {
if nsp.Key == ns {
if nsp != nil && nsp.Key == ns {
return nsp
}
}

View file

@ -18,6 +18,15 @@ func TestNamespacesContains(t *testing.T) {
if !ns.Contains("NEWPID") {
t.Fatal("namespaces should contain NEWPID but does not")
}
withNil := Namespaces{
GetNamespace("UNDEFINED"), // this element will be nil
GetNamespace("NEWPID"),
}
if !withNil.Contains("NEWPID") {
t.Fatal("namespaces should contain NEWPID but does not")
}
}
func TestCapabilitiesContains(t *testing.T) {