diff --git a/internal/arduino/resources/checksums.go b/internal/arduino/resources/checksums.go index ecd50b5bcc9..c9309f93e5b 100644 --- a/internal/arduino/resources/checksums.go +++ b/internal/arduino/resources/checksums.go @@ -31,6 +31,7 @@ import ( "github.com/arduino/arduino-cli/internal/i18n" paths "github.com/arduino/go-paths-helper" + "github.com/sirupsen/logrus" ) // TestLocalArchiveChecksum test if the checksum of the local archive match the checksum of the DownloadResource @@ -82,20 +83,21 @@ func (r *DownloadResource) TestLocalArchiveChecksum(downloadDir *paths.Path) (bo } // TestLocalArchiveSize test if the local archive size match the DownloadResource size -func (r *DownloadResource) TestLocalArchiveSize(downloadDir *paths.Path) (bool, error) { +func (r *DownloadResource) TestLocalArchiveSize(downloadDir *paths.Path) error { filePath, err := r.ArchivePath(downloadDir) if err != nil { - return false, errors.New(i18n.Tr("getting archive path: %s", err)) + return errors.New(i18n.Tr("getting archive path: %s", err)) } info, err := filePath.Stat() if err != nil { - return false, errors.New(i18n.Tr("getting archive info: %s", err)) + return errors.New(i18n.Tr("getting archive info: %s", err)) } + // If the size do not match, just report a warning and continue + // (the checksum is sufficient to ensure the integrity of the archive) if info.Size() != r.Size { - return false, fmt.Errorf("%s: %d != %d", i18n.Tr("fetched archive size differs from size specified in index"), info.Size(), r.Size) + logrus.Warningf("%s: %d != %d", i18n.Tr("fetched archive size differs from size specified in index"), info.Size(), r.Size) } - - return true, nil + return nil } // TestLocalArchiveIntegrity checks for integrity of the local archive. @@ -106,10 +108,8 @@ func (r *DownloadResource) TestLocalArchiveIntegrity(downloadDir *paths.Path) (b return false, nil } - if ok, err := r.TestLocalArchiveSize(downloadDir); err != nil { + if err := r.TestLocalArchiveSize(downloadDir); err != nil { return false, errors.New(i18n.Tr("testing archive size: %s", err)) - } else if !ok { - return false, nil } ok, err := r.TestLocalArchiveChecksum(downloadDir) diff --git a/internal/arduino/resources/resources_test.go b/internal/arduino/resources/resources_test.go index f5b9b252d1f..0ca1bdd884b 100644 --- a/internal/arduino/resources/resources_test.go +++ b/internal/arduino/resources/resources_test.go @@ -82,6 +82,10 @@ func TestDownloadAndChecksums(t *testing.T) { require.NoError(t, err) downloadAndTestChecksum() + require.NoError(t, r.TestLocalArchiveSize(tmp)) + r.Size = 500 + require.NoError(t, r.TestLocalArchiveSize(tmp)) + r.Checksum = "" _, err = r.TestLocalArchiveChecksum(tmp) require.Error(t, err) diff --git a/internal/integrationtest/core/core_test.go b/internal/integrationtest/core/core_test.go index cd28d8286c0..635dce891d6 100644 --- a/internal/integrationtest/core/core_test.go +++ b/internal/integrationtest/core/core_test.go @@ -1354,3 +1354,15 @@ func TestReferencedCoreBuildAndRuntimeProperties(t *testing.T) { out.ArrayMustContain(jsonEncode("runtime.platform.path=" + corePlatformPath)) } } + +func TestCoreInstallWithWrongArchiveSize(t *testing.T) { + // See: https://github.com/arduino/arduino-cli/issues/2332 + env, cli := integrationtest.CreateArduinoCLIWithEnvironment(t) + defer env.CleanUp() + + _, _, err := cli.Run("--additional-urls", "https://raw.githubusercontent.com/geolink/opentracker-arduino-board/bf6158ebab0402db217bfb02ea61461ddc6f2940/package_opentracker_index.json", "core", "update-index") + require.NoError(t, err) + + _, _, err = cli.Run("--additional-urls", "https://raw.githubusercontent.com/geolink/opentracker-arduino-board/bf6158ebab0402db217bfb02ea61461ddc6f2940/package_opentracker_index.json", "core", "install", "opentracker:sam@1.0.5") + require.NoError(t, err) +} pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy