summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorOpenShift Merge Robot <openshift-merge-robot@users.noreply.github.com>2020-09-07 09:56:23 -0400
committerGitHub <noreply@github.com>2020-09-07 09:56:23 -0400
commitbe7778df6c70227dab760ea92637ed97dad29641 (patch)
treea36f88d9220d0abb82b1e3cbc409449ed38b4a1e
parente848fc6e155ab2b27358223e0ae8d7d011848775 (diff)
parent238abf6e2171f344bbb0ee2233a3e1f6b585ebb0 (diff)
downloadpodman-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.go13
-rw-r--r--libpod/image/layer_tree.go4
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
}