Skip to content

Commit d12a3b2

Browse files
authored
Merge pull request #3779 from ningmingxiao/fix_panic
bugfix:fix limactl panic because of invalid digest
2 parents 21b7bbb + 646e7b9 commit d12a3b2

File tree

4 files changed

+19
-6
lines changed

4 files changed

+19
-6
lines changed

pkg/downloader/downloader.go

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -122,9 +122,6 @@ func WithDecompress(decompress bool) Opt {
122122
func WithExpectedDigest(expectedDigest digest.Digest) Opt {
123123
return func(o *options) error {
124124
if expectedDigest != "" {
125-
if !expectedDigest.Algorithm().Available() {
126-
return fmt.Errorf("expected digest algorithm %q is not available", expectedDigest.Algorithm())
127-
}
128125
if err := expectedDigest.Validate(); err != nil {
129126
return err
130127
}

pkg/downloader/downloader_test.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,10 @@ func TestDownloadRemote(t *testing.T) {
5959
_, err := Download(context.Background(), localPath, dummyRemoteFileURL, WithExpectedDigest(wrongDigest))
6060
assert.ErrorContains(t, err, "expected digest")
6161

62+
wrongDigest2 := digest.Digest("8313944efb4f38570c689813f288058b674ea6c487017a5a4738dc674b65f9d9")
63+
_, err = Download(context.Background(), localPath, dummyRemoteFileURL, WithExpectedDigest(wrongDigest2))
64+
assert.ErrorContains(t, err, "invalid checksum digest format")
65+
6266
r, err := Download(context.Background(), localPath, dummyRemoteFileURL, WithExpectedDigest(dummyRemoteFileDigest))
6367
assert.NilError(t, err)
6468
assert.Equal(t, StatusDownloaded, r.Status)

pkg/limayaml/validate.go

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -425,9 +425,6 @@ func validateFileObject(f File, fieldName string) error {
425425
errs = errors.Join(errs, fmt.Errorf("field `arch` must be one of %v; got %q", ArchTypes, f.Arch))
426426
}
427427
if f.Digest != "" {
428-
if !f.Digest.Algorithm().Available() {
429-
errs = errors.Join(errs, fmt.Errorf("field `%s.digest` refers to an unavailable digest algorithm", fieldName))
430-
}
431428
if err := f.Digest.Validate(); err != nil {
432429
errs = errors.Join(errs, fmt.Errorf("field `%s.digest` is invalid: %s: %w", fieldName, f.Digest.String(), err))
433430
}

pkg/limayaml/validate_test.go

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,21 @@ func TestValidateMinimumLimaVersion(t *testing.T) {
7373
}
7474
}
7575

76+
func TestValidateDigest(t *testing.T) {
77+
images := `images: [{"location": "https://cloud-images.ubuntu.com/releases/oracular/release-20250701/ubuntu-24.10-server-cloudimg-amd64.img",digest: "69f31d3208895e5f646e345fbc95190e5e311ecd1359a4d6ee2c0b6483ceca03"}]`
78+
validProbe := `probes: [{"script": "#!foo"}]`
79+
y, err := Load([]byte(validProbe+"\n"+images), "lima.yaml")
80+
assert.NilError(t, err)
81+
err = Validate(y, false)
82+
assert.Error(t, err, "field `images[0].digest` is invalid: 69f31d3208895e5f646e345fbc95190e5e311ecd1359a4d6ee2c0b6483ceca03: invalid checksum digest format")
83+
84+
images2 := `images: [{"location": "https://cloud-images.ubuntu.com/releases/oracular/release-20250701/ubuntu-24.10-server-cloudimg-amd64.img",digest: "sha001:69f31d3208895e5f646e345fbc95190e5e311ecd1359a4d6ee2c0b6483ceca03"}]`
85+
y2, err := Load([]byte(validProbe+"\n"+images2), "lima.yaml")
86+
assert.NilError(t, err)
87+
err = Validate(y2, false)
88+
assert.Error(t, err, "field `images[0].digest` is invalid: sha001:69f31d3208895e5f646e345fbc95190e5e311ecd1359a4d6ee2c0b6483ceca03: unsupported digest algorithm")
89+
}
90+
7691
func TestValidateProbes(t *testing.T) {
7792
images := `images: [{"location": "/"}]`
7893
validProbe := `probes: [{"script": "#!foo"}]`

0 commit comments

Comments
 (0)