Skip to content

Commit 32139a2

Browse files
fix(meta): guard GetReferrersInfo against a missing referrer entry (#4213)
Signed-off-by: Artem Muterko <artem@sopho.tech>
1 parent 13a004e commit 32139a2

4 files changed

Lines changed: 20 additions & 2 deletions

File tree

pkg/meta/boltdb/boltdb.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1250,7 +1250,7 @@ func (bdw *BoltDB) GetReferrersInfo(repo string, referredDigest godigest.Digest,
12501250
return err
12511251
}
12521252

1253-
referrersInfo := protoRepoMeta.Referrers[referredDigest.String()].List
1253+
referrersInfo := protoRepoMeta.Referrers[referredDigest.String()].GetList()
12541254
seenDigests := make(map[string]struct{})
12551255

12561256
for i := range referrersInfo {

pkg/meta/boltdb/boltdb_test.go

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -306,6 +306,15 @@ func TestWrapperErrors(t *testing.T) {
306306
_, err = boltdbWrapper.GetReferrersInfo("repo", "refDig", []string{})
307307
So(err, ShouldNotBeNil)
308308
})
309+
310+
Convey("digest with no referrers entry returns empty list without panic", func() {
311+
err := boltdbWrapper.SetRepoReference(ctx, "repo", "tag", imageMeta)
312+
So(err, ShouldBeNil)
313+
314+
referrers, err := boltdbWrapper.GetReferrersInfo("repo", godigest.FromString("no-referrers"), []string{})
315+
So(err, ShouldBeNil)
316+
So(referrers, ShouldBeEmpty)
317+
})
309318
})
310319

311320
Convey("ResetRepoReferences", func() {

pkg/meta/redis/redis.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1732,7 +1732,7 @@ func (rc *RedisDB) GetReferrersInfo(repo string, referredDigest godigest.Digest,
17321732
return referrersInfoResult, err
17331733
}
17341734

1735-
referrersInfo := protoRepoMeta.Referrers[referredDigest.String()].List
1735+
referrersInfo := protoRepoMeta.Referrers[referredDigest.String()].GetList()
17361736
seenDigests := make(map[string]struct{})
17371737

17381738
for i := range referrersInfo {

pkg/meta/redis/redis_test.go

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -822,6 +822,15 @@ func TestWrapperErrors(t *testing.T) {
822822
_, err = metaDB.GetReferrersInfo("repo", "refDig", []string{})
823823
So(err, ShouldNotBeNil)
824824
})
825+
826+
Convey("digest with no referrers entry returns empty list without panic", func() {
827+
err := metaDB.SetRepoReference(ctx, "repo", "tag", imageMeta)
828+
So(err, ShouldBeNil)
829+
830+
referrers, err := metaDB.GetReferrersInfo("repo", godigest.FromString("no-referrers"), []string{})
831+
So(err, ShouldBeNil)
832+
So(referrers, ShouldBeEmpty)
833+
})
825834
})
826835

827836
Convey("ResetRepoReferences", func() {

0 commit comments

Comments
 (0)