From b24b0f9aecb7261d9a1bf86b8c2c3719e827f09b Mon Sep 17 00:00:00 2001 From: Silvano Cerza Date: Thu, 18 Mar 2021 16:58:42 +0100 Subject: [PATCH] Fix OS X metadata folder not ignored when installing lib from zip --- arduino/libraries/librariesmanager/install.go | 3 ++ test/test_lib.py | 34 ++++++++++++++++++ test/testdata/fake-lib.zip | Bin 0 -> 635 bytes 3 files changed, 37 insertions(+) create mode 100644 test/testdata/fake-lib.zip diff --git a/arduino/libraries/librariesmanager/install.go b/arduino/libraries/librariesmanager/install.go index ff42a178672..77ea54e79ab 100644 --- a/arduino/libraries/librariesmanager/install.go +++ b/arduino/libraries/librariesmanager/install.go @@ -124,6 +124,9 @@ func (lm *LibrariesManager) InstallZipLib(ctx context.Context, archivePath strin return err } + // Ignores metadata from Mac OS X + paths.FilterOutPrefix("__MACOSX") + if len(paths) > 1 { return fmt.Errorf("archive is not valid: multiple files found in zip file top level") } diff --git a/test/test_lib.py b/test/test_lib.py index 7264c09500f..c21deeaf055 100644 --- a/test/test_lib.py +++ b/test/test_lib.py @@ -834,3 +834,37 @@ def test_lib_upgrade_using_library_with_invalid_version(run_command, data_dir): data = json.loads(res.stdout) assert len(data) == 1 assert "" != data[0]["library"]["version"] + + +def test_install_zip_lib_with_macos_metadata(run_command, data_dir, downloads_dir): + # Initialize configs to enable --zip-path flag + env = { + "ARDUINO_DATA_DIR": data_dir, + "ARDUINO_DOWNLOADS_DIR": downloads_dir, + "ARDUINO_SKETCHBOOK_DIR": data_dir, + "ARDUINO_ENABLE_UNSAFE_LIBRARY_INSTALL": "true", + } + assert run_command("config init --dest-dir .", custom_env=env) + + lib_install_dir = Path(data_dir, "libraries", "fake-lib") + # Verifies library is not already installed + assert not lib_install_dir.exists() + + zip_path = Path(__file__).parent / "testdata" / "fake-lib.zip" + # Test zip-path install + res = run_command(f"lib install --zip-path {zip_path}") + assert res.ok + assert "--git-url and --zip-path flags allow installing untrusted files, use it at your own risk." in res.stdout + + # Verifies library is installed in expected path + assert lib_install_dir.exists() + files = list(lib_install_dir.glob("**/*")) + assert lib_install_dir / "library.properties" in files + + # Reinstall library + assert run_command(f"lib install --zip-path {zip_path}") + + # Verifies library remains installed + assert lib_install_dir.exists() + files = list(lib_install_dir.glob("**/*")) + assert lib_install_dir / "library.properties" in files diff --git a/test/testdata/fake-lib.zip b/test/testdata/fake-lib.zip new file mode 100644 index 0000000000000000000000000000000000000000..b697c2561674fd80cb6daa889256a1d2a86a572a GIT binary patch literal 635 zcmWIWW@h1H00G&yq98B>N^mmBFvQ3EIy(CYN9c!!a56AwmIWt(aA^fM10%}|W(Ec@ z5db$L0gDl7iP@>TIhjciBc1@YgD@5&M1b~kFw6xS5#(OCwj0RX55&?ySHO(`8dH>5 zRH;``lwXiqRFaum40cy!d2qr@OhZG@?BzP-Ai(mVZvLaJgDTq|b%|ZmtZDjs;|bsU z{=K$_`S~say31xr{t$9K*7{#FX|IY8#hRBe2Lw-N)%WjGHE{XldHqAV5&QgQ zHIMvX=k&R+m@{Q^s?BWk?65EoF%1YX>3C_4qI#hEda#^hI?7rfI1nNf$%@b2#{$E0NahD4gdfE literal 0 HcmV?d00001