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)
Upstream-commit: c5226d94fab4e261fe2407262d9b5177326d4062
Component: engine
This commit is contained in:
Kato Kazuyoshi
2014-04-10 22:07:29 +09:00
parent bc56d5d95c
commit 9a57be369c
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) {