diff options
author | OpenShift Merge Robot <openshift-merge-robot@users.noreply.github.com> | 2020-09-07 09:56:23 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-09-07 09:56:23 -0400 |
commit | be7778df6c70227dab760ea92637ed97dad29641 (patch) | |
tree | a36f88d9220d0abb82b1e3cbc409449ed38b4a1e | |
parent | e848fc6e155ab2b27358223e0ae8d7d011848775 (diff) | |
parent | 238abf6e2171f344bbb0ee2233a3e1f6b585ebb0 (diff) | |
download | podman-be7778df6c70227dab760ea92637ed97dad29641.tar.gz podman-be7778df6c70227dab760ea92637ed97dad29641.tar.bz2 podman-be7778df6c70227dab760ea92637ed97dad29641.zip |
Merge pull request #7554 from vrothberg/follow-up-on-7444
make image parent check more robust
-rw-r--r-- | libpod/image/image.go | 13 | ||||
-rw-r--r-- | libpod/image/layer_tree.go | 4 |
2 files changed, 11 insertions, 6 deletions
diff --git a/libpod/image/image.go b/libpod/image/image.go index dee2ce0ee..2d055cc44 100644 --- a/libpod/image/image.go +++ b/libpod/image/image.go @@ -1247,11 +1247,14 @@ func areParentAndChild(parent, child *imgspecv1.Image) bool { // candidate parent's diff IDs, which together would have // controlled which layers were used - // issue #7444 describes a panic where the length of child.RootFS.DiffIDs - // is checked but child is nil. Adding a simple band-aid approach to prevent - // the problem until the origin of the problem can be worked out in the issue - // itself. - if child == nil || len(parent.RootFS.DiffIDs) > len(child.RootFS.DiffIDs) { + // Both, child and parent, may be nil when the storage is left in an + // incoherent state. Issue #7444 describes such a case when a build + // has been killed. + if child == nil || parent == nil { + return false + } + + if len(parent.RootFS.DiffIDs) > len(child.RootFS.DiffIDs) { return false } childUsesCandidateDiffs := true diff --git a/libpod/image/layer_tree.go b/libpod/image/layer_tree.go index 3699655fd..18101575e 100644 --- a/libpod/image/layer_tree.go +++ b/libpod/image/layer_tree.go @@ -32,7 +32,9 @@ func (t *layerTree) toOCI(ctx context.Context, i *Image) (*ociv1.Image, error) { oci, exists := t.ociCache[i.ID()] if !exists { oci, err = i.ociv1Image(ctx) - t.ociCache[i.ID()] = oci + if err == nil { + t.ociCache[i.ID()] = oci + } } return oci, err } |