From a6f85861df406ae7d44c25c1cbeecc1d267b9f43 Mon Sep 17 00:00:00 2001
From: Brent Baude <bbaude@redhat.com>
Date: Tue, 25 Aug 2020 14:46:35 -0500
Subject: fix panic when checking len on nil object

issue #7444 describes a problem where an image does not have a manifest file and cannot be processed by our library correctly.  the origin of the panic is because we are checking the len of a nil object's attribute.  this is a temporary fix to protect from the panic in the future.  the origin of the problem is more interesting and requires more work when the code author returns from pto.

Signed-off-by: Brent Baude <bbaude@redhat.com>
---
 libpod/image/image.go | 7 ++++++-
 1 file changed, 6 insertions(+), 1 deletion(-)

diff --git a/libpod/image/image.go b/libpod/image/image.go
index 6106084d5..dee2ce0ee 100644
--- a/libpod/image/image.go
+++ b/libpod/image/image.go
@@ -1246,7 +1246,12 @@ func areParentAndChild(parent, child *imgspecv1.Image) bool {
 	// the child and candidate parent should share all of the
 	// candidate parent's diff IDs, which together would have
 	// controlled which layers were used
-	if len(parent.RootFS.DiffIDs) > len(child.RootFS.DiffIDs) {
+
+	// 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) {
 		return false
 	}
 	childUsesCandidateDiffs := true
-- 
cgit v1.2.3-54-g00ecf