From d84971960567eca1f3a403fbd1b3c4e07d3a447d Mon Sep 17 00:00:00 2001 From: Alex Goodman Date: Fri, 22 Dec 2023 12:48:50 -0500 Subject: [PATCH] add remaining binary cataloger patterns and snippets Signed-off-by: Alex Goodman --- .github/workflows/validations.yaml | 2 +- syft/pkg/cataloger/binary/cataloger_test.go | 768 +++++++++--------- .../cataloger/binary/test-fixtures/.gitignore | 3 +- .../cataloger/binary/test-fixtures/Makefile | 8 +- .../binary/test-fixtures/capture-snippet.sh | 2 +- .../classifiers/positive/.gitignore | 2 - .../bash | Bin 618 -> 0 bytes .../classifiers/positive/busybox-3.33.3/[ | 3 - .../positive/busybox-3.33.3/busybox | 1 - .../erlexec | Bin 648 -> 0 bytes .../go | Bin 444 -> 0 bytes .../classifiers/positive/go-hint-1.15/VERSION | 1 - .../haproxy | Bin 638 -> 0 bytes .../haproxy | Bin 642 -> 0 bytes .../haproxy | Bin 642 -> 0 bytes .../positive/haproxy-2.7.3/haproxy | Bin 5474 -> 0 bytes .../classifiers/positive/httpd-2.4.54/httpd | Bin 652 -> 0 bytes .../classifiers/positive/ibm-java-1.8.0/java | Bin 115 -> 0 bytes .../positive/mariadb-10.6.15/README.md | 31 - .../positive/mariadb-10.6.15/mariadb | Bin 40 -> 0 bytes .../memcached | 18 - .../positive/mysql-5.6.51/README.md | 39 - .../classifiers/positive/mysql-5.6.51/mysql | Bin 100 -> 0 bytes .../positive/mysql-8.0.34/README.md | 40 - .../classifiers/positive/mysql-8.0.34/mysql | Bin 100 -> 0 bytes .../classifiers/positive/nginx-1.25.1/nginx | Bin 837 -> 0 bytes .../positive/nginx-openresty-1.21.4.2/nginx | Bin 1425 -> 0 bytes .../classifiers/positive/node-19.2.1/node | 2 - .../classifiers/positive/openjdk-1.8.0/java | Bin 39 -> 0 bytes .../positive/openjdk-lts-11.0.17/java | Bin 124 -> 0 bytes .../positive/php-apache-8.2.1/libphp.so | 5 - .../classifiers/positive/php-cli-8.2.1/php | 5 - .../positive/php-fpm-8.2.1/php-fpm | 5 - .../positive/postgresql-15.1/postgres | Bin 16 -> 0 bytes .../positive/postgresql-15beta4/postgres | Bin 19 -> 0 bytes .../positive/postgresql-9.5alpha1/postgres | 5 - .../positive/postgresql-9.6.24/postgres | Bin 18 -> 0 bytes .../positive/python-binary-3.6/python3.6 | Bin 69 -> 0 bytes .../python-binary-lib-3.7/libpython3.7.so | Bin 69 -> 0 bytes .../python-duplicates/libpython3.8.so | Bin 122 -> 0 bytes .../positive/redis-server-2.8.23/redis-server | Bin 7025 -> 0 bytes .../positive/redis-server-4.0.11/redis-server | Bin 9179 -> 0 bytes .../positive/redis-server-5.0.0/redis-server | Bin 7061 -> 0 bytes .../positive/redis-server-6.0.16/redis-server | Bin 2574 -> 0 bytes .../positive/redis-server-7.0.0/redis-server | Bin 1239 -> 0 bytes .../positive/redis-server-7.0.14/redis-server | Bin 890 -> 0 bytes .../redis-server-7.2.3-amd64/redis-server | Bin 831 -> 0 bytes .../redis-server-7.2.3-arm64/redis-server | Bin 816 -> 0 bytes .../classifiers/positive/ruby-1.9.3p551/ruby | 9 - .../lib/libstd-f6f9eec1635e636a.dylib | Bin 21301 -> 0 bytes .../lib/libstd-16f2b65e77054c42.dylib | Bin 28955 -> 0 bytes .../lib/libstd-86aefecbddda356d.so | Bin 2180 -> 0 bytes .../positive/traefik-1.7.34/traefik | Bin 9 -> 0 bytes .../positive/traefik-2.9.6/traefik | Bin 7 -> 0 bytes .../haproxy/2.7.3/linux-amd64/haproxy | Bin 331 -> 331 bytes .../1.8.0_352-b08/linux-amd64/java | Bin 0 -> 325 bytes .../java-jre-openjdk/11.0.17/linux-amd64/java | Bin 0 -> 325 bytes .../java-jre-oracle/19.0.1/darwin}/java | Bin .../java-jre-oracle/19.0.1/linux-amd64}/java | Bin .../perl/5.12.5/linux-amd64}/perl | Bin .../perl/5.20.0/linux-amd64}/perl | Bin .../perl/5.37.8/linux-amd64}/perl | Bin .../snippets/php-cli/8.2.1/linux-amd64/php | 12 + .../php-fpm/8.2.1/linux-amd64/php-fpm | 12 + .../postgres/9.5alpha1/linux-amd64/postgres | 10 + .../3.8.16/linux-amd64}/dir/python3.8 | Bin .../3.8.16/linux-amd64}/patchlevel.h | 0 .../3.8.16/linux-amd64}/python3.8 | Bin .../3.7.4/linux-amd64/libpython3.7m.so.1.0 | Bin 0 -> 344 bytes .../3.5.3/linux-amd64}/python3.5 | Bin .../python/3.6.3/linux-amd64/python3.6 | Bin 0 -> 241 bytes .../snippets/ruby/1.9.3p551/linux-amd64/ruby | Bin 0 -> 328 bytes .../traefik/1.7.34/linux-amd64/traefik | Bin 0 -> 332 bytes .../traefik/2.9.6/linux-amd64/traefik | Bin 0 -> 332 bytes .../binary/test-fixtures/config.yaml | 306 +++---- .../test-fixtures/manager/internal/cli/cli.go | 3 +- .../internal/cli/commands/add_snippet.go | 15 +- .../manager/internal/cli/commands/download.go | 5 +- .../manager/internal/cli/commands/list.go | 19 +- .../manager/internal/cli/commands/root.go | 3 +- .../internal/cli/commands/write_snippet.go | 31 +- .../manager/internal/config/application.go | 8 +- .../internal/config/binary_from_image.go | 3 +- .../manager/internal/download_from_image.go | 66 +- .../manager/internal/list_entries.go | 8 +- .../manager/internal/snippet_metadata.go | 3 +- .../manager/internal/ui/action.go | 1 - .../manager/internal/ui/binary_list.go | 3 +- .../binary/test-fixtures/manager/main.go | 3 +- .../manager/testutil/snippet_or_binary.go | 9 +- 90 files changed, 676 insertions(+), 793 deletions(-) delete mode 100644 syft/pkg/cataloger/binary/test-fixtures/classifiers/positive/.gitignore delete mode 100644 syft/pkg/cataloger/binary/test-fixtures/classifiers/positive/bash-5.1.16-2c336c63e26881d2f02f34379024e7c314bce572c08cbaa319bacbbec29f93ed-1210190-100/bash delete mode 100644 syft/pkg/cataloger/binary/test-fixtures/classifiers/positive/busybox-3.33.3/[ delete mode 120000 syft/pkg/cataloger/binary/test-fixtures/classifiers/positive/busybox-3.33.3/busybox delete mode 100644 syft/pkg/cataloger/binary/test-fixtures/classifiers/positive/erlexec-25.3.2.7-2224b3107551c409fb8da6d85eaa1ed730d088db438924c97d6e25851381dd28-91724-100/erlexec delete mode 100644 syft/pkg/cataloger/binary/test-fixtures/classifiers/positive/go-1.21.3-6a05bd57efff25a9d682b8e25ce572ee7ff723f4f5bcbba6429012121e247365-7879390-100/go delete mode 100644 syft/pkg/cataloger/binary/test-fixtures/classifiers/positive/go-hint-1.15/VERSION delete mode 100644 syft/pkg/cataloger/binary/test-fixtures/classifiers/positive/haproxy-1.5.14-5ff6ed7c0149382701391f268e78793a623d6b8fd2b9b65fe89c08b6041fd4d4-527350-100/haproxy delete mode 100644 syft/pkg/cataloger/binary/test-fixtures/classifiers/positive/haproxy-1.8.22-cc32c297e83f2626d253d8615008c199a1dc9cba13883731f78ecbe9bfc524d4-1386742-100/haproxy delete mode 100644 syft/pkg/cataloger/binary/test-fixtures/classifiers/positive/haproxy-2.7.3-99d01769ac3457cf33b7e3eb93050453e20c09afe5631f810fd658fb5314bbd3-3156502-100/haproxy delete mode 100644 syft/pkg/cataloger/binary/test-fixtures/classifiers/positive/haproxy-2.7.3/haproxy delete mode 100644 syft/pkg/cataloger/binary/test-fixtures/classifiers/positive/httpd-2.4.54/httpd delete mode 100644 syft/pkg/cataloger/binary/test-fixtures/classifiers/positive/ibm-java-1.8.0/java delete mode 100644 syft/pkg/cataloger/binary/test-fixtures/classifiers/positive/mariadb-10.6.15/README.md delete mode 100644 syft/pkg/cataloger/binary/test-fixtures/classifiers/positive/mariadb-10.6.15/mariadb delete mode 100644 syft/pkg/cataloger/binary/test-fixtures/classifiers/positive/memcached-1.6.18/memcached-1.6.18-176467412e0722ae1b2c1159555d33574653ebfa87e8591d88c1e6e416ab3019-19-100/memcached delete mode 100644 syft/pkg/cataloger/binary/test-fixtures/classifiers/positive/mysql-5.6.51/README.md delete mode 100644 syft/pkg/cataloger/binary/test-fixtures/classifiers/positive/mysql-5.6.51/mysql delete mode 100644 syft/pkg/cataloger/binary/test-fixtures/classifiers/positive/mysql-8.0.34/README.md delete mode 100644 syft/pkg/cataloger/binary/test-fixtures/classifiers/positive/mysql-8.0.34/mysql delete mode 100644 syft/pkg/cataloger/binary/test-fixtures/classifiers/positive/nginx-1.25.1/nginx delete mode 100644 syft/pkg/cataloger/binary/test-fixtures/classifiers/positive/nginx-openresty-1.21.4.2/nginx delete mode 100644 syft/pkg/cataloger/binary/test-fixtures/classifiers/positive/node-19.2.1/node delete mode 100644 syft/pkg/cataloger/binary/test-fixtures/classifiers/positive/openjdk-1.8.0/java delete mode 100644 syft/pkg/cataloger/binary/test-fixtures/classifiers/positive/openjdk-lts-11.0.17/java delete mode 100644 syft/pkg/cataloger/binary/test-fixtures/classifiers/positive/php-apache-8.2.1/libphp.so delete mode 100644 syft/pkg/cataloger/binary/test-fixtures/classifiers/positive/php-cli-8.2.1/php delete mode 100644 syft/pkg/cataloger/binary/test-fixtures/classifiers/positive/php-fpm-8.2.1/php-fpm delete mode 100644 syft/pkg/cataloger/binary/test-fixtures/classifiers/positive/postgresql-15.1/postgres delete mode 100644 syft/pkg/cataloger/binary/test-fixtures/classifiers/positive/postgresql-15beta4/postgres delete mode 100644 syft/pkg/cataloger/binary/test-fixtures/classifiers/positive/postgresql-9.5alpha1/postgres delete mode 100644 syft/pkg/cataloger/binary/test-fixtures/classifiers/positive/postgresql-9.6.24/postgres delete mode 100644 syft/pkg/cataloger/binary/test-fixtures/classifiers/positive/python-binary-3.6/python3.6 delete mode 100644 syft/pkg/cataloger/binary/test-fixtures/classifiers/positive/python-binary-lib-3.7/libpython3.7.so delete mode 100644 syft/pkg/cataloger/binary/test-fixtures/classifiers/positive/python-duplicates/libpython3.8.so delete mode 100644 syft/pkg/cataloger/binary/test-fixtures/classifiers/positive/redis-server-2.8.23/redis-server delete mode 100644 syft/pkg/cataloger/binary/test-fixtures/classifiers/positive/redis-server-4.0.11/redis-server delete mode 100644 syft/pkg/cataloger/binary/test-fixtures/classifiers/positive/redis-server-5.0.0/redis-server delete mode 100644 syft/pkg/cataloger/binary/test-fixtures/classifiers/positive/redis-server-6.0.16/redis-server delete mode 100644 syft/pkg/cataloger/binary/test-fixtures/classifiers/positive/redis-server-7.0.0/redis-server delete mode 100644 syft/pkg/cataloger/binary/test-fixtures/classifiers/positive/redis-server-7.0.14/redis-server delete mode 100644 syft/pkg/cataloger/binary/test-fixtures/classifiers/positive/redis-server-7.2.3-amd64/redis-server delete mode 100644 syft/pkg/cataloger/binary/test-fixtures/classifiers/positive/redis-server-7.2.3-arm64/redis-server delete mode 100644 syft/pkg/cataloger/binary/test-fixtures/classifiers/positive/ruby-1.9.3p551/ruby delete mode 100644 syft/pkg/cataloger/binary/test-fixtures/classifiers/positive/rust-1.50.0/lib/rustlib/aarch64-apple-darwin/lib/libstd-f6f9eec1635e636a.dylib delete mode 100644 syft/pkg/cataloger/binary/test-fixtures/classifiers/positive/rust-1.67.1/toolchains/stable-aarch64-apple-darwin/lib/libstd-16f2b65e77054c42.dylib delete mode 100644 syft/pkg/cataloger/binary/test-fixtures/classifiers/positive/rust-1.67.1/toolchains/stable-x86_64-unknown-linux-musl/lib/libstd-86aefecbddda356d.so delete mode 100644 syft/pkg/cataloger/binary/test-fixtures/classifiers/positive/traefik-1.7.34/traefik delete mode 100644 syft/pkg/cataloger/binary/test-fixtures/classifiers/positive/traefik-2.9.6/traefik create mode 100644 syft/pkg/cataloger/binary/test-fixtures/classifiers/snippets/java-jre-openjdk/1.8.0_352-b08/linux-amd64/java create mode 100644 syft/pkg/cataloger/binary/test-fixtures/classifiers/snippets/java-jre-openjdk/11.0.17/linux-amd64/java rename syft/pkg/cataloger/binary/test-fixtures/classifiers/{positive/oracle-macos-java-19.0.1 => snippets/java-jre-oracle/19.0.1/darwin}/java (100%) rename syft/pkg/cataloger/binary/test-fixtures/classifiers/{positive/oracle-java-19.0.1 => snippets/java-jre-oracle/19.0.1/linux-amd64}/java (100%) rename syft/pkg/cataloger/binary/test-fixtures/classifiers/{positive/perl-5.12.5 => snippets/perl/5.12.5/linux-amd64}/perl (100%) rename syft/pkg/cataloger/binary/test-fixtures/classifiers/{positive/perl-5.20.0 => snippets/perl/5.20.0/linux-amd64}/perl (100%) rename syft/pkg/cataloger/binary/test-fixtures/classifiers/{positive/perl-5.37.8 => snippets/perl/5.37.8/linux-amd64}/perl (100%) create mode 100644 syft/pkg/cataloger/binary/test-fixtures/classifiers/snippets/php-cli/8.2.1/linux-amd64/php create mode 100644 syft/pkg/cataloger/binary/test-fixtures/classifiers/snippets/php-fpm/8.2.1/linux-amd64/php-fpm create mode 100644 syft/pkg/cataloger/binary/test-fixtures/classifiers/snippets/postgres/9.5alpha1/linux-amd64/postgres rename syft/pkg/cataloger/binary/test-fixtures/classifiers/{positive/python-duplicates => snippets/python-duplicates/3.8.16/linux-amd64}/dir/python3.8 (100%) rename syft/pkg/cataloger/binary/test-fixtures/classifiers/{positive/python-duplicates => snippets/python-duplicates/3.8.16/linux-amd64}/patchlevel.h (100%) rename syft/pkg/cataloger/binary/test-fixtures/classifiers/{positive/python-duplicates => snippets/python-duplicates/3.8.16/linux-amd64}/python3.8 (100%) create mode 100644 syft/pkg/cataloger/binary/test-fixtures/classifiers/snippets/python-shared-lib/3.7.4/linux-amd64/libpython3.7m.so.1.0 rename syft/pkg/cataloger/binary/test-fixtures/classifiers/{positive/python-3.5-with-incorrect-match => snippets/python-with-incorrect-match/3.5.3/linux-amd64}/python3.5 (100%) create mode 100644 syft/pkg/cataloger/binary/test-fixtures/classifiers/snippets/python/3.6.3/linux-amd64/python3.6 create mode 100644 syft/pkg/cataloger/binary/test-fixtures/classifiers/snippets/ruby/1.9.3p551/linux-amd64/ruby create mode 100644 syft/pkg/cataloger/binary/test-fixtures/classifiers/snippets/traefik/1.7.34/linux-amd64/traefik create mode 100644 syft/pkg/cataloger/binary/test-fixtures/classifiers/snippets/traefik/2.9.6/linux-amd64/traefik diff --git a/.github/workflows/validations.yaml b/.github/workflows/validations.yaml index 862244d9b..cac95826a 100644 --- a/.github/workflows/validations.yaml +++ b/.github/workflows/validations.yaml @@ -57,7 +57,7 @@ jobs: - name: Restore binary cataloger test-fixture cache uses: actions/cache@704facf57e6136b1bc63b828d79edcd491f0ee84 #v3.3.2 with: - path: syft/pkg/cataloger/binary/test-fixtures/classifiers/dynamic + path: syft/pkg/cataloger/binary/test-fixtures/classifiers/bin key: ${{ runner.os }}-unit-binary-cataloger-cache-${{ hashFiles( 'syft/pkg/cataloger/binary/test-fixtures/cache.fingerprint' ) }} - name: Restore Kernel test-fixture cache diff --git a/syft/pkg/cataloger/binary/cataloger_test.go b/syft/pkg/cataloger/binary/cataloger_test.go index f576d5d5c..3efc05255 100644 --- a/syft/pkg/cataloger/binary/cataloger_test.go +++ b/syft/pkg/cataloger/binary/cataloger_test.go @@ -4,7 +4,6 @@ import ( "errors" "flag" "fmt" - "github.com/anchore/syft/syft/pkg/cataloger/binary/test-fixtures/manager/testutil" "io" "strings" "testing" @@ -17,12 +16,13 @@ import ( "github.com/anchore/stereoscope/pkg/imagetest" "github.com/anchore/syft/syft/file" "github.com/anchore/syft/syft/pkg" + "github.com/anchore/syft/syft/pkg/cataloger/binary/test-fixtures/manager/testutil" "github.com/anchore/syft/syft/source" ) var mustUseOriginalBinaries = flag.Bool("must-use-original-binaries", false, "force the use of binaries for testing (instead of snippets)") -func Test_Cataloger_DefaultClassifiers_PositiveCases(t *testing.T) { +func Test_Cataloger_PositiveCases(t *testing.T) { tests := []struct { name string logicalFixture string @@ -61,18 +61,19 @@ func Test_Cataloger_DefaultClassifiers_PositiveCases(t *testing.T) { Metadata: metadata("postgresql-binary"), }, }, - // TODO: missing original binary - //{ - // logicalFixture: "postgres/9.5alpha1/linux-amd64", - // expected: pkg.Package{ - // Name: "postgresql", - // Version: "9.5alpha1", - // Type: "binary", - // PURL: "pkg:generic/postgresql@9.5alpha1", - // Locations: locations("postgres"), - // Metadata: metadata("postgresql-binary"), - // }, - //}, + { + // TODO: find original binary... + // note: cannot find the original binary, using a custom snippet based on the original snippet in the repo + logicalFixture: "postgres/9.5alpha1/linux-amd64", + expected: pkg.Package{ + Name: "postgresql", + Version: "9.5alpha1", + Type: "binary", + PURL: "pkg:generic/postgresql@9.5alpha1", + Locations: locations("postgres"), + Metadata: metadata("postgresql-binary"), + }, + }, { logicalFixture: "mysql/8.0.34/linux-amd64", expected: pkg.Package{ @@ -106,29 +107,28 @@ func Test_Cataloger_DefaultClassifiers_PositiveCases(t *testing.T) { Metadata: metadata("mariadb-binary"), }, }, - // TODO: need to add original binary - //{ - // logicalFixture: "traefik/2.9.6/linux-amd64", - // expected: pkg.Package{ - // Name: "traefik", - // Version: "2.9.6", - // Type: "binary", - // PURL: "pkg:generic/traefik@2.9.6", - // Locations: locations("traefik"), - // Metadata: metadata("traefik-binary"), - // }, - //}, - //{ - // logicalFixture: "test-fixtures/classifiers/positive/traefik-1.7.34/linux-amd64", - // expected: pkg.Package{ - // Name: "traefik", - // Version: "1.7.34", - // Type: "binary", - // PURL: "pkg:generic/traefik@1.7.34", - // Locations: locations("traefik"), - // Metadata: metadata("traefik-binary"), - // }, - //}, + { + logicalFixture: "traefik/1.7.34/linux-amd64", + expected: pkg.Package{ + Name: "traefik", + Version: "1.7.34", + Type: "binary", + PURL: "pkg:generic/traefik@1.7.34", + Locations: locations("traefik"), + Metadata: metadata("traefik-binary"), + }, + }, + { + logicalFixture: "traefik/2.9.6/linux-amd64", + expected: pkg.Package{ + Name: "traefik", + Version: "2.9.6", + Type: "binary", + PURL: "pkg:generic/traefik@2.9.6", + Locations: locations("traefik"), + Metadata: metadata("traefik-binary"), + }, + }, { logicalFixture: "memcached/1.6.18/linux-amd64", expected: pkg.Package{ @@ -151,78 +151,84 @@ func Test_Cataloger_DefaultClassifiers_PositiveCases(t *testing.T) { Metadata: metadata("httpd-binary"), }, }, - - // TODO: missing original binaries - //{ - // logicalFixture: "test-fixtures/classifiers/positive/php-cli-8.2.1/linux-amd64", - // expected: pkg.Package{ - // Name: "php-cli", - // Version: "8.2.1", - // Type: "binary", - // PURL: "pkg:generic/php-cli@8.2.1", - // Locations: locations("php"), - // Metadata: metadata("php-cli-binary"), - // }, - //}, - //{ - // logicalFixture: "test-fixtures/classifiers/positive/php-fpm-8.2.1/linux-amd64", - // expected: pkg.Package{ - // Name: "php-fpm", - // Version: "8.2.1", - // Type: "binary", - // PURL: "pkg:generic/php-fpm@8.2.1", - // Locations: locations("php-fpm"), - // Metadata: metadata("php-fpm-binary"), - // }, - //}, - //{ - // logicalFixture: "test-fixtures/classifiers/positive/php-apache-8.2.1/linux-amd64", - // expected: pkg.Package{ - // Name: "libphp", - // Version: "8.2.1", - // Type: "binary", - // PURL: "pkg:generic/php@8.2.1", - // Locations: locations("libphp.so"), - // Metadata: metadata("php-apache-binary"), - // }, - //}, - - // TODO: original binary is different than test fixture - //{ - // logicalFixture: "perl/5.12.5/linux-amd64", - // expected: pkg.Package{ - // Name: "perl", - // Version: "5.12.5", - // Type: "binary", - // PURL: "pkg:generic/perl@5.12.5", - // Locations: locations("perl"), - // Metadata: metadata("perl-binary"), - // }, - //}, - //{ - // name: "positive-perl-5.20.0", - // logicalFixture: "test-fixtures/classifiers/positive/perl-5.20.0/linux-amd64", - // expected: pkg.Package{ - // Name: "perl", - // Version: "5.20.0", - // Type: "binary", - // PURL: "pkg:generic/perl@5.20.0", - // Locations: locations("perl"), - // Metadata: metadata("perl-binary"), - // }, - //}, - //{ - // name: "positive-perl-5.37.8", - // logicalFixture: "test-fixtures/classifiers/positive/perl-5.37.8/linux-amd64", - // expected: pkg.Package{ - // Name: "perl", - // Version: "5.37.8", - // Type: "binary", - // PURL: "pkg:generic/perl@5.37.8", - // Locations: locations("perl"), - // Metadata: metadata("perl-binary"), - // }, - //}, + { + // TODO: find original binary... + // note: cannot find the original binary, using a custom snippet based on the original snippet in the repo + logicalFixture: "php-cli/8.2.1/linux-amd64", + expected: pkg.Package{ + Name: "php-cli", + Version: "8.2.1", + Type: "binary", + PURL: "pkg:generic/php-cli@8.2.1", + Locations: locations("php"), + Metadata: metadata("php-cli-binary"), + }, + }, + { + // TODO: find original binary... + // note: cannot find the original binary, using a custom snippet based on the original snippet in the repo + logicalFixture: "php-fpm/8.2.1/linux-amd64", + expected: pkg.Package{ + Name: "php-fpm", + Version: "8.2.1", + Type: "binary", + PURL: "pkg:generic/php-fpm@8.2.1", + Locations: locations("php-fpm"), + Metadata: metadata("php-fpm-binary"), + }, + }, + { + // TODO: find original binary... + // note: cannot find the original binary, using a custom snippet based on the original snippet in the repo + logicalFixture: "php-apache/8.2.1/linux-amd64", + expected: pkg.Package{ + Name: "libphp", + Version: "8.2.1", + Type: "binary", + PURL: "pkg:generic/php@8.2.1", + Locations: locations("libphp.so"), + Metadata: metadata("php-apache-binary"), + }, + }, + { + // TODO: original binary is different than whats in config.yaml + // note: cannot find the original binary, using a custom snippet based on the original snippet in the repo + logicalFixture: "perl/5.12.5/linux-amd64", + expected: pkg.Package{ + Name: "perl", + Version: "5.12.5", + Type: "binary", + PURL: "pkg:generic/perl@5.12.5", + Locations: locations("perl"), + Metadata: metadata("perl-binary"), + }, + }, + { + // TODO: original binary is different than whats in config.yaml + // note: cannot find the original binary, using a custom snippet based on the original snippet in the repo + logicalFixture: "perl/5.20.0/linux-amd64", + expected: pkg.Package{ + Name: "perl", + Version: "5.20.0", + Type: "binary", + PURL: "pkg:generic/perl@5.20.0", + Locations: locations("perl"), + Metadata: metadata("perl-binary"), + }, + }, + { + // TODO: original binary is different than whats in config.yaml + // note: cannot find the original binary, using a custom snippet based on the original snippet in the repo + logicalFixture: "perl/5.37.8/linux-amd64", + expected: pkg.Package{ + Name: "perl", + Version: "5.37.8", + Type: "binary", + PURL: "pkg:generic/perl@5.37.8", + Locations: locations("perl"), + Metadata: metadata("perl-binary"), + }, + }, { logicalFixture: "haproxy/1.5.14/linux-amd64", expected: pkg.Package{ @@ -280,116 +286,112 @@ func Test_Cataloger_DefaultClassifiers_PositiveCases(t *testing.T) { }, }, - // TODO: missing original binaries - //{ - // logicalFixture: "test-fixtures/classifiers/positive/redis-server-2.8.23/linux-amd64", - // expected: pkg.Package{ - // Name: "redis", - // Version: "2.8.23", - // Type: "binary", - // PURL: "pkg:generic/redis@2.8.23", - // Locations: locations("redis-server"), - // Metadata: metadata("redis-binary"), - // }, - //}, - - //{ - // name: "positive-redis-4.0.11", - // logicalFixture: "test-fixtures/classifiers/positive/redis-server-4.0.11/linux-amd64", - // expected: pkg.Package{ - // Name: "redis", - // Version: "4.0.11", - // Type: "binary", - // PURL: "pkg:generic/redis@4.0.11", - // Locations: locations("redis-server"), - // Metadata: metadata("redis-binary"), - // }, - //}, - //{ - // name: "positive-redis-5.0.0", - // logicalFixture: "test-fixtures/classifiers/positive/redis-server-5.0.0/linux-amd64", - // expected: pkg.Package{ - // Name: "redis", - // Version: "5.0.0", - // Type: "binary", - // PURL: "pkg:generic/redis@5.0.0", - // Locations: locations("redis-server"), - // Metadata: metadata("redis-binary"), - // }, - //}, - //{ - // name: "positive-redis-6.0.16", - // logicalFixture: "test-fixtures/classifiers/positive/redis-server-6.0.16", - // expected: pkg.Package{ - // Name: "redis", - // Version: "6.0.16", - // Type: "binary", - // PURL: "pkg:generic/redis@6.0.16", - // Locations: locations("redis-server"), - // Metadata: metadata("redis-binary"), - // }, - //}, - //{ - // name: "positive-redis-7.0.0", - // logicalFixture: "test-fixtures/classifiers/positive/redis-server-7.0.0", - // expected: pkg.Package{ - // Name: "redis", - // Version: "7.0.0", - // Type: "binary", - // PURL: "pkg:generic/redis@7.0.0", - // Locations: locations("redis-server"), - // Metadata: metadata("redis-binary"), - // }, - //}, - //{ - // name: "positive-redis-7.0.14", - // logicalFixture: "test-fixtures/classifiers/positive/redis-server-7.0.14", - // expected: pkg.Package{ - // Name: "redis", - // Version: "7.0.14", - // Type: "binary", - // PURL: "pkg:generic/redis@7.0.14", - // Locations: locations("redis-server"), - // Metadata: metadata("redis-binary"), - // }, - //}, - //{ - // name: "positive-redis-7.2.3-amd64", - // logicalFixture: "test-fixtures/classifiers/positive/redis-server-7.2.3-amd64", - // expected: pkg.Package{ - // Name: "redis", - // Version: "7.2.3", - // Type: "binary", - // PURL: "pkg:generic/redis@7.2.3", - // Locations: locations("redis-server"), - // Metadata: metadata("redis-binary"), - // }, - //}, - //{ - // name: "positive-redis-7.2.3-arm64", - // logicalFixture: "test-fixtures/classifiers/positive/redis-server-7.2.3-arm64", - // expected: pkg.Package{ - // Name: "redis", - // Version: "7.2.3", - // Type: "binary", - // PURL: "pkg:generic/redis@7.2.3", - // Locations: locations("redis-server"), - // Metadata: metadata("redis-binary"), - // }, - //}, - - // TODO: missing original binaries - //{ - // name: "positive-libpython3.7.so", - // logicalFixture: "test-fixtures/classifiers/positive/python-binary-lib-3.7", - // expected: pkg.Package{ - // Name: "python", - // Version: "3.7.4", - // PURL: "pkg:generic/python@3.7.4", - // Locations: locations("libpython3.7.so"), - // Metadata: metadata("python-binary-lib"), - // }, - //}, + { + // note: dynamic (non-snippet) test case + logicalFixture: "redis-server/2.8.23/linux-amd64", + expected: pkg.Package{ + Name: "redis", + Version: "2.8.23", + Type: "binary", + PURL: "pkg:generic/redis@2.8.23", + Locations: locations("redis-server"), + Metadata: metadata("redis-binary"), + }, + }, + { + // note: dynamic (non-snippet) test case + logicalFixture: "redis-server/4.0.11/linux-amd64", + expected: pkg.Package{ + Name: "redis", + Version: "4.0.11", + Type: "binary", + PURL: "pkg:generic/redis@4.0.11", + Locations: locations("redis-server"), + Metadata: metadata("redis-binary"), + }, + }, + { + // note: dynamic (non-snippet) test case + logicalFixture: "redis-server/5.0.0/linux-amd64", + expected: pkg.Package{ + Name: "redis", + Version: "5.0.0", + Type: "binary", + PURL: "pkg:generic/redis@5.0.0", + Locations: locations("redis-server"), + Metadata: metadata("redis-binary"), + }, + }, + { + // note: dynamic (non-snippet) test case + logicalFixture: "redis-server/6.0.16/linux-amd64", + expected: pkg.Package{ + Name: "redis", + Version: "6.0.16", + Type: "binary", + PURL: "pkg:generic/redis@6.0.16", + Locations: locations("redis-server"), + Metadata: metadata("redis-binary"), + }, + }, + { + // note: dynamic (non-snippet) test case + logicalFixture: "redis-server/7.0.0/linux-amd64", + expected: pkg.Package{ + Name: "redis", + Version: "7.0.0", + Type: "binary", + PURL: "pkg:generic/redis@7.0.0", + Locations: locations("redis-server"), + Metadata: metadata("redis-binary"), + }, + }, + { + // note: dynamic (non-snippet) test case + logicalFixture: "redis-server/7.0.14/linux-amd64", + expected: pkg.Package{ + Name: "redis", + Version: "7.0.14", + Type: "binary", + PURL: "pkg:generic/redis@7.0.14", + Locations: locations("redis-server"), + Metadata: metadata("redis-binary"), + }, + }, + { + // note: dynamic (non-snippet) test case + logicalFixture: "redis-server/7.2.3/linux-amd64", + expected: pkg.Package{ + Name: "redis", + Version: "7.2.3", + Type: "binary", + PURL: "pkg:generic/redis@7.2.3", + Locations: locations("redis-server"), + Metadata: metadata("redis-binary"), + }, + }, + { + // note: dynamic (non-snippet) test case + logicalFixture: "redis-server/7.2.3/linux-arm64", + expected: pkg.Package{ + Name: "redis", + Version: "7.2.3", + Type: "binary", + PURL: "pkg:generic/redis@7.2.3", + Locations: locations("redis-server"), + Metadata: metadata("redis-binary"), + }, + }, + { + logicalFixture: "python-shared-lib/3.7.4/linux-amd64", + expected: pkg.Package{ + Name: "python", + Version: "3.7.4", + PURL: "pkg:generic/python@3.7.4", + Locations: locations("libpython3.7m.so.1.0"), + Metadata: metadata("python-binary-lib"), + }, + }, { // note: dynamic (non-snippet) test case @@ -457,51 +459,49 @@ func Test_Cataloger_DefaultClassifiers_PositiveCases(t *testing.T) { }, }, }, - // TODO: missing original binary - //{ - // name: "positive-python-3.5-with-incorrect-match", - // logicalFixture: "test-fixtures/classifiers/positive/python-3.5-with-incorrect-match", - // expected: pkg.Package{ - // Name: "python", - // Version: "3.5.3", - // PURL: "pkg:generic/python@3.5.3", - // Locations: locations("python3.5"), - // Metadata: metadata("python-binary"), - // }, - //}, - - // TODO: can't seem to get this lined up with the new binary pulled down... the original snippet also has content I can't account for - //{ - // logicalFixture: "python/3.6/linux-amd64", - // expected: pkg.Package{ - // Name: "python", - // Version: "3.6.3", - // PURL: "pkg:generic/python@3.6.3", - // Locations: locations("python3.6"), - // Metadata: metadata("python-binary"), - // }, - //}, - - // TODO: missing original binary - //{ - // name: "positive-python-duplicates", - // logicalFixture: "test-fixtures/classifiers/positive/python-duplicates", - // expected: pkg.Package{ - // Name: "python", - // Version: "3.8.16", - // Type: "binary", - // PURL: "pkg:generic/python@3.8.16", - // Locations: locations("dir/python3.8", "python3.8", "libpython3.8.so"), - // Metadata: pkg.BinarySignature{ - // Matches: []pkg.ClassifierMatch{ - // match("python-binary", "dir/python3.8"), - // match("python-binary", "python3.8"), - // match("python-binary-lib", "libpython3.8.so"), - // }, - // }, - // }, - //}, - + { + // TODO: find original binary... + // note: cannot find the original binary, using a custom snippet based on the original snippet in the repo + logicalFixture: "python-with-incorrect-match/3.5.3/linux-amd64", + expected: pkg.Package{ + Name: "python", + Version: "3.5.3", + PURL: "pkg:generic/python@3.5.3", + Locations: locations("python3.5"), + Metadata: metadata("python-binary"), + }, + }, + { + // TODO: find original binary... + // note: cannot find the original binary, using a custom snippet based on the original snippet in the repo + logicalFixture: "python/3.6.3/linux-amd64", + expected: pkg.Package{ + Name: "python", + Version: "3.6.3", + PURL: "pkg:generic/python@3.6.3", + Locations: locations("python3.6"), + Metadata: metadata("python-binary"), + }, + }, + { + // TODO: find original binary... + // note: cannot find the original binary, using a custom snippet based on the original snippet in the repo + logicalFixture: "python-duplicates/3.8.16/linux-amd64", + expected: pkg.Package{ + Name: "python", + Version: "3.8.16", + Type: "binary", + PURL: "pkg:generic/python@3.8.16", + Locations: locations("dir/python3.8", "python3.8", "libpython3.8.so"), + Metadata: pkg.BinarySignature{ + Matches: []pkg.ClassifierMatch{ + match("python-binary", "dir/python3.8"), + match("python-binary", "python3.8"), + match("python-binary-lib", "libpython3.8.so"), + }, + }, + }, + }, { logicalFixture: "go/1.21.3/linux-amd64", expected: pkg.Package{ @@ -522,18 +522,18 @@ func Test_Cataloger_DefaultClassifiers_PositiveCases(t *testing.T) { Metadata: metadata("nodejs-binary"), }, }, - // TODO: captured outside of the original binary - //{ - // name: "positive-go-hint", - // logicalFixture: "test-fixtures/classifiers/positive/go-hint-1.15", - // expected: pkg.Package{ - // Name: "go", - // Version: "1.15", - // PURL: "pkg:generic/go@1.15", - // Locations: locations("VERSION"), - // Metadata: metadata("go-binary-hint"), - // }, - //}, + { + // TODO: find original binary... + // note: cannot find the original binary, using a custom snippet based on the original snippet in the repo + logicalFixture: "go-version-hint/1.15/any", + expected: pkg.Package{ + Name: "go", + Version: "1.15", + PURL: "pkg:generic/go@1.15", + Locations: locations("VERSION"), + Metadata: metadata("go-binary-hint"), + }, + }, { // note: this is testing BUSYBOX which is typically through a link to "[" (in this case a symlink but in // practice this is often a hard link). @@ -545,56 +545,55 @@ func Test_Cataloger_DefaultClassifiers_PositiveCases(t *testing.T) { Metadata: metadata("busybox-binary", "[", "busybox"), }, }, - // TODO: need to get the original binaries - //{ - // logicalFixture: "openjdk/1.8.0", - // expected: pkg.Package{ - // Name: "java", - // Version: "1.8.0_352-b08", - // Type: "binary", - // PURL: "pkg:generic/java@1.8.0_352-b08", - // Locations: locations("java"), - // Metadata: metadata("java-binary-openjdk", "java"), - // }, - //}, - //{ - // name: "positive-java-openjdk-lts", - // logicalFixture: "test-fixtures/classifiers/positive/openjdk-lts-11.0.17", - // expected: pkg.Package{ - // Name: "java", - // Version: "11.0.17+8-LTS", - // Type: "binary", - // PURL: "pkg:generic/java@11.0.17+8-LTS", - // Locations: locations("java"), - // Metadata: metadata("java-binary-openjdk", "java"), - // }, - //}, - //{ - // name: "positive-java-oracle", - // logicalFixture: "test-fixtures/classifiers/positive/oracle-java-19.0.1", - // expected: pkg.Package{ - // Name: "java", - // Version: "19.0.1+10-21", - // Type: "binary", - // PURL: "pkg:generic/java@19.0.1+10-21", - // Locations: locations("java"), - // Metadata: metadata("java-binary-oracle", "java"), - // }, - //}, - //{ - // name: "positive-java-oracle-macos", - // logicalFixture: "test-fixtures/classifiers/positive/oracle-macos-java-19.0.1", - // expected: pkg.Package{ - // Name: "java", - // Version: "19.0.1+10-21", - // Type: "binary", - // PURL: "pkg:generic/java@19.0.1+10-21", - // Locations: locations("java"), - // Metadata: metadata("java-binary-oracle", "java"), - // }, - //}, { - name: "positive-java-ibm", + logicalFixture: "java-jre-openjdk/1.8.0_352-b08/linux-amd64", + expected: pkg.Package{ + Name: "java", + Version: "1.8.0_352-b08", + Type: "binary", + PURL: "pkg:generic/java@1.8.0_352-b08", + Locations: locations("java"), + Metadata: metadata("java-binary-openjdk", "java"), + }, + }, + { + logicalFixture: "java-jre-openjdk/11.0.17/linux-amd64", + expected: pkg.Package{ + Name: "java", + Version: "11.0.17+8-LTS", + Type: "binary", + PURL: "pkg:generic/java@11.0.17+8-LTS", + Locations: locations("java"), + Metadata: metadata("java-binary-openjdk", "java"), + }, + }, + { + // TODO: find original binary... + // note: cannot find the original binary, using a custom snippet based on the original snippet in the repo + logicalFixture: "java-jre-oracle/19.0.1/linux-amd64", + expected: pkg.Package{ + Name: "java", + Version: "19.0.1+10-21", + Type: "binary", + PURL: "pkg:generic/java@19.0.1+10-21", + Locations: locations("java"), + Metadata: metadata("java-binary-oracle", "java"), + }, + }, + { + // TODO: find original binary... + // note: cannot find the original binary, using a custom snippet based on the original snippet in the repo + logicalFixture: "java-jre-oracle/19.0.1/darwin", + expected: pkg.Package{ + Name: "java", + Version: "19.0.1+10-21", + Type: "binary", + PURL: "pkg:generic/java@19.0.1+10-21", + Locations: locations("java"), + Metadata: metadata("java-binary-oracle", "java"), + }, + }, + { logicalFixture: "java-jre-ibm/1.8.0_391/linux-amd64", expected: pkg.Package{ Name: "java", @@ -605,43 +604,65 @@ func Test_Cataloger_DefaultClassifiers_PositiveCases(t *testing.T) { Metadata: metadata("java-binary-ibm", "java"), }, }, - // TODO: need to get the original binaries - //{ - // name: "positive-rust-1.50.0-macos", - // logicalFixture: "test-fixtures/classifiers/positive/rust-1.50.0", - // expected: pkg.Package{ - // Name: "rust", - // Version: "1.50.0", - // Type: "binary", - // PURL: "pkg:generic/rust@1.50.0", - // Locations: locations("lib/rustlib/aarch64-apple-darwin/lib/libstd-f6f9eec1635e636a.dylib"), - // Metadata: metadata("rust-standard-library-macos"), - // }, - //}, - //{ - // name: "positive-rust-1.67.1-macos", - // logicalFixture: "test-fixtures/classifiers/positive/rust-1.67.1/toolchains/stable-aarch64-apple-darwin", - // expected: pkg.Package{ - // Name: "rust", - // Version: "1.67.1", - // Type: "binary", - // PURL: "pkg:generic/rust@1.67.1", - // Locations: locations("lib/libstd-16f2b65e77054c42.dylib"), - // Metadata: metadata("rust-standard-library-macos"), - // }, - //}, - //{ - // name: "positive-rust-1.67.1-linux", - // logicalFixture: "test-fixtures/classifiers/positive/rust-1.67.1/toolchains/stable-x86_64-unknown-linux-musl", - // expected: pkg.Package{ - // Name: "rust", - // Version: "1.67.1", - // Type: "binary", - // PURL: "pkg:generic/rust@1.67.1", - // Locations: locations("lib/libstd-86aefecbddda356d.so"), - // Metadata: metadata("rust-standard-library-linux"), - // }, - //}, + { + logicalFixture: "rust-libstd/1.50.0/linux-amd64", + expected: pkg.Package{ + Name: "rust", + Version: "1.50.0", + Type: "binary", + PURL: "pkg:generic/rust@1.50.0", + Locations: locations("libstd-6f77337c1826707d.so"), + Metadata: metadata("rust-standard-library-linux"), + }, + }, + { + // TODO: find original binary... + // note: cannot find the original binary, using a custom snippet based on the original snippet in the repo + logicalFixture: "rust-libstd/1.50.0/darwin", + expected: pkg.Package{ + Name: "rust", + Version: "1.50.0", + Type: "binary", + PURL: "pkg:generic/rust@1.50.0", + Locations: locations("libstd-f6f9eec1635e636a.dylib"), + Metadata: metadata("rust-standard-library-macos"), + }, + }, + { + // TODO: find original binary... + // note: cannot find the original binary, using a custom snippet based on the original snippet in the repo + logicalFixture: "rust-libstd/1.67.1/darwin", + expected: pkg.Package{ + Name: "rust", + Version: "1.67.1", + Type: "binary", + PURL: "pkg:generic/rust@1.67.1", + Locations: locations("libstd-16f2b65e77054c42.dylib"), + Metadata: metadata("rust-standard-library-macos"), + }, + }, + { + logicalFixture: "rust-libstd-musl/1.67.1/linux-amd64", + expected: pkg.Package{ + Name: "rust", + Version: "1.67.1", + Type: "binary", + PURL: "pkg:generic/rust@1.67.1", + Locations: locations("libstd-86aefecbddda356d.so"), + Metadata: metadata("rust-standard-library-linux"), + }, + }, + { + logicalFixture: "rust-libstd/1.67.1/linux-amd64", + expected: pkg.Package{ + Name: "rust", + Version: "1.67.1", + Type: "binary", + PURL: "pkg:generic/rust@1.67.1", + Locations: locations("libstd-c6192dd4c4d410ac.so"), + Metadata: metadata("rust-standard-library-linux"), + }, + }, { // note: dynamic (non-snippet) test case @@ -695,18 +716,17 @@ func Test_Cataloger_DefaultClassifiers_PositiveCases(t *testing.T) { }, }, }, - //{ - // name: "positive-ruby-1.9.3p551", - // logicalFixture: "test-fixtures/classifiers/positive/ruby-1.9.3p551/linux-amd64", - // expected: pkg.Package{ - // Name: "ruby", - // Version: "1.9.3p551", - // Type: "binary", - // PURL: "pkg:generic/ruby@1.9.3p551", - // Locations: locations("ruby"), - // Metadata: metadata("ruby-binary"), - // }, - //}, + { + logicalFixture: "ruby/1.9.3p551/linux-amd64", + expected: pkg.Package{ + Name: "ruby", + Version: "1.9.3p551", + Type: "binary", + PURL: "pkg:generic/ruby@1.9.3p551", + Locations: locations("ruby"), + Metadata: metadata("ruby-binary"), + }, + }, { logicalFixture: "consul/1.15.2/linux-amd64", expected: pkg.Package{ diff --git a/syft/pkg/cataloger/binary/test-fixtures/.gitignore b/syft/pkg/cataloger/binary/test-fixtures/.gitignore index 9a442ff1e..18a7c41bd 100644 --- a/syft/pkg/cataloger/binary/test-fixtures/.gitignore +++ b/syft/pkg/cataloger/binary/test-fixtures/.gitignore @@ -1,2 +1,3 @@ classifiers/dynamic -classifiers/bin \ No newline at end of file +classifiers/bin +cache.fingerprint \ No newline at end of file diff --git a/syft/pkg/cataloger/binary/test-fixtures/Makefile b/syft/pkg/cataloger/binary/test-fixtures/Makefile index 2eaf95f44..5d752c2be 100644 --- a/syft/pkg/cataloger/binary/test-fixtures/Makefile +++ b/syft/pkg/cataloger/binary/test-fixtures/Makefile @@ -1,4 +1,4 @@ -.PHONY: default list download download-all fingerprint +.PHONY: default list download download-all cache.fingerprint .DEFAULT_GOAL := default @@ -13,9 +13,11 @@ download: ## download only binaries that are not covered by a snippet download-all: ## download all managed binaries go run ./manager download -fingerprint: ## prints the sha256sum of the any input to the download command (to determine if there is a cache miss) - @cat ./config.yaml | sha256sum | awk '{print $$1}' +cache.fingerprint: ## prints the sha256sum of the any input to the download command (to determine if there is a cache miss) + @cat ./config.yaml | sha256sum | awk '{print $$1}' | tee cache.fingerprint +clean: ## clean up all downloaded binaries + rm -rf ./classifiers/bin ## Halp! ################################# diff --git a/syft/pkg/cataloger/binary/test-fixtures/capture-snippet.sh b/syft/pkg/cataloger/binary/test-fixtures/capture-snippet.sh index c154b804a..2767682d3 100755 --- a/syft/pkg/cataloger/binary/test-fixtures/capture-snippet.sh +++ b/syft/pkg/cataloger/binary/test-fixtures/capture-snippet.sh @@ -2,7 +2,7 @@ # Default values for length and prefix length LENGTH=100 -PREFIX_LENGTH=10 +PREFIX_LENGTH=20 SEARCH_FOR='' GROUP_NAME='' diff --git a/syft/pkg/cataloger/binary/test-fixtures/classifiers/positive/.gitignore b/syft/pkg/cataloger/binary/test-fixtures/classifiers/positive/.gitignore deleted file mode 100644 index 5acc24bd6..000000000 --- a/syft/pkg/cataloger/binary/test-fixtures/classifiers/positive/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -!*.so -!VERSION \ No newline at end of file diff --git a/syft/pkg/cataloger/binary/test-fixtures/classifiers/positive/bash-5.1.16-2c336c63e26881d2f02f34379024e7c314bce572c08cbaa319bacbbec29f93ed-1210190-100/bash b/syft/pkg/cataloger/binary/test-fixtures/classifiers/positive/bash-5.1.16-2c336c63e26881d2f02f34379024e7c314bce572c08cbaa319bacbbec29f93ed-1210190-100/bash deleted file mode 100644 index 0fb07cbeac7d2bdcf94f5125c3a5796a3aeb3670..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 618 zcmYLG!HU~35Y4$?G2lxAwqr@QBL@mg*t8VFUa~EeQm7=4)@ohH$Vy3W`zigvLiYzk zI!@A7FdFejdYXAJiXwQz4!sIkgFeDwyz2vDA+hcd_8ya=bA68?9U4#p9`^|MXn<9~ z*s>^>qJs7I5qQQ0L{aoA0_$4r)OTFMb!jy;1P_hkbpHkda3e%%N`btTlGWU1+=^T* zs*LBjFoNaUV6osPlSV5gSf!QG8V#>(C9uBz1g^8Y8|!-W2Fg6qF2H8Hg5DwE0nI)r z-C_&}Stey3!w>X>+jYQTy8XEQFpHr+Qp3)uwmm}Yx^Gy=#2e7}9%+Yp>vWmV+d84@ z{*YXm(qWhK7*>1N*6;2=(SYppYavuo6nQ3ci<&DdBucX=rX$_3%%=k?Z<^T>9=7>m^L5QfErap_cGeCU#@QKX8LKj? zkn~TX`L8m|2ql;Qz5wky<;m!)s~5`*jX1fiyJ<9AkzM~JDpHoRa>{1lu|;ZV?07PH demR|Aex1%=DBn>4#n0cT^E1T-zvc0KjX$px&dvY; diff --git a/syft/pkg/cataloger/binary/test-fixtures/classifiers/positive/busybox-3.33.3/[ b/syft/pkg/cataloger/binary/test-fixtures/classifiers/positive/busybox-3.33.3/[ deleted file mode 100644 index 7829d71b9..000000000 --- a/syft/pkg/cataloger/binary/test-fixtures/classifiers/positive/busybox-3.33.3/[ +++ /dev/null @@ -1,3 +0,0 @@ -# note: this SHOULD match as busybox 3.33.3 - -noise!BusyBox v3.33.3!noise \ No newline at end of file diff --git a/syft/pkg/cataloger/binary/test-fixtures/classifiers/positive/busybox-3.33.3/busybox b/syft/pkg/cataloger/binary/test-fixtures/classifiers/positive/busybox-3.33.3/busybox deleted file mode 120000 index c3e3150b8..000000000 --- a/syft/pkg/cataloger/binary/test-fixtures/classifiers/positive/busybox-3.33.3/busybox +++ /dev/null @@ -1 +0,0 @@ -./[ \ No newline at end of file diff --git a/syft/pkg/cataloger/binary/test-fixtures/classifiers/positive/erlexec-25.3.2.7-2224b3107551c409fb8da6d85eaa1ed730d088db438924c97d6e25851381dd28-91724-100/erlexec b/syft/pkg/cataloger/binary/test-fixtures/classifiers/positive/erlexec-25.3.2.7-2224b3107551c409fb8da6d85eaa1ed730d088db438924c97d6e25851381dd28-91724-100/erlexec deleted file mode 100644 index 9c3924d77fff8a201c2a845477f39eab89b73f71..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 648 zcmYLHU2EJh5WMI7iUq$UU`v)Pe;uUIkhB!;`p`=XrIa8`>pP`7+emVI_wOqw*H#EU z%r3J#GfI*K_Bf!E0X1}I@XDDfL@Z>zIfdC_<_9xP7>GZB4DdK3+@k{40%L1duSE_I zyGP(TFCa;hs|0#uagaw`!`ne;@q{W?{6X@v`ilc_&P7+Sye>mt{A)96kVP0NL9Yh58Po01g`)0#JzVPJ-Sys$oOK0qb1&IH)(?qD(q%kVkK&SDDh zzidHDrw)}!;TJk@#sL^y@4oH6-lU+8RCNtj(wF zLPY#XSPFNuvHH{f_b8J6xUEDkm}pyBl||H4V=pCEyu-4ngl-C1SG?q{OrakgeEj@G zHwz~eq$YU^zfCxR#%|s}FXB=d#sEIVa3<7Ib|*bn;@ab)b7S99CpS2#q%y_PjJ-;8zMWC_8JU7yqK0e*n07!ruS@ diff --git a/syft/pkg/cataloger/binary/test-fixtures/classifiers/positive/go-1.21.3-6a05bd57efff25a9d682b8e25ce572ee7ff723f4f5bcbba6429012121e247365-7879390-100/go b/syft/pkg/cataloger/binary/test-fixtures/classifiers/positive/go-1.21.3-6a05bd57efff25a9d682b8e25ce572ee7ff723f4f5bcbba6429012121e247365-7879390-100/go deleted file mode 100644 index f0eff60bb31ae974adb5c2e58e7aed59d4d91647..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 444 zcmYLFJx{|h5KR{b2ADu%J1GkYrHY-{`H&bY!B{c0JF?SrVyPq{aio@sUjZ9G0R9IP z0|Of?|A7^ow&E=N`JVmG=jZ!AlvraY3@$*fp)We!8q1kL>6IBe4EkEPEt+v(fiN&1 z5H7I*k^!MP$#R;))oczlq!IYOzwd+6ORU8$=CFyfv1DHf%J_}~;38yl!4gzTQ6{nl zPpM3ivI1E`5fh~n8mU+@Sx6~(OtX+sJCMdn#M$;8(6wr|Ri~n;f@|P$AhiKpVKEpX zmk6tr-|*Nfr09{yr#*_UsLpbj&f>M5_pU!9Is=VTJsMXpNs}zfLVIFAQ=00(a}rwC z`nFSm)V1iWbsL}lOz<8&cpZ5*%7%<78AopKq7}6+YQ4N5n|!x^o?p(L;PL4D&Edz> Z$>8wWdwF+vCVO{ZE}tBaejFYi`~nLxa%TVl diff --git a/syft/pkg/cataloger/binary/test-fixtures/classifiers/positive/go-hint-1.15/VERSION b/syft/pkg/cataloger/binary/test-fixtures/classifiers/positive/go-hint-1.15/VERSION deleted file mode 100644 index 5bedbed9f..000000000 --- a/syft/pkg/cataloger/binary/test-fixtures/classifiers/positive/go-hint-1.15/VERSION +++ /dev/null @@ -1 +0,0 @@ -go1.15-beta2 \ No newline at end of file diff --git a/syft/pkg/cataloger/binary/test-fixtures/classifiers/positive/haproxy-1.5.14-5ff6ed7c0149382701391f268e78793a623d6b8fd2b9b65fe89c08b6041fd4d4-527350-100/haproxy b/syft/pkg/cataloger/binary/test-fixtures/classifiers/positive/haproxy-1.5.14-5ff6ed7c0149382701391f268e78793a623d6b8fd2b9b65fe89c08b6041fd4d4-527350-100/haproxy deleted file mode 100644 index f2f6760e407ba66ff72ac8a57996fb2cd6b28c02..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 638 zcmYL{ZHv?}6ovP*zv4m>cA@PgX_B^sg04Hhz$n6uiik+k+)SgjEoth`{Cm@#SvDU6 zxhJ{FIZu)#fdlsFRX_v!1XJVP7-B7C)*Zv_F`Iffju`T(1r=aFBivyFvq1FZ7^y33n69-H7OT1;m6n84Yq;T;%fR(^xOClY--6_sb^*4#TfieWb5Od&6poe5 zBv0WV`pFGFP`KWG-+jGF!JOiIU8B101fA>uph;uTfPVBCXIOPkOTOw%7S;Kfojc{z zkh2u*;Njh;FRSe$0n261WD2*l>&%C{AJH=X`H~wgNLf%M#@2#JWh-L^CzWhy)6|Nv zXjjxUg?krTFsSFluf(`~f2B~88E|K4o^m z^D=KT?@f{fFR5ko$;paMM32)Af})tm6Ok0LB!|uv(xj8pav7tSYSJv?4?r zTGxtNQyZ;lA!Q*7+6ak8W33xgvC@|3X5ji}IJ4eu-T^N&?E-AJH!wN`+@qO;(jBI- zmptQT3V+d0Zs>u+)%M%=%XJF&5dZ9q>be7TuK$fTjl2Q<=rNwK>YV1~s@yhl_+(| zYDsF*=oFq@Xu+bMcR!cGQs{>OQ;5clXyeFQO~}iu36(eP^%_2G%X0JU;V5uWKETj4 z6NW{QC>$3hi$&3rU1*=Br-WQayCUzY0<`Ouj|*^e`)K8huCw{Y67Sz+pB4|Fb<1VW uSahA%D@sr8Nfcvnx!O$d+Te^sK(uw!(cJAorl2(VS3bIWF-d_`T2m-RrSRhZf(vs zUvDoD1bgW`bjA$m4}>tv1t(dk1W9(j{!cw6t0(kB{C*EHSzu=x2bJ@)@T`Nv;#{O9@XA5VVqFvsxl7a)_dL;wH) diff --git a/syft/pkg/cataloger/binary/test-fixtures/classifiers/positive/haproxy-2.7.3/haproxy b/syft/pkg/cataloger/binary/test-fixtures/classifiers/positive/haproxy-2.7.3/haproxy deleted file mode 100644 index da21a03ddc887b7b5cf87c55c037959fbaee7cea..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5474 zcmeH}*-{fx5QYcu^hPaxfTJjGkW3O5#ckNb9+m{r5(msg1CfzLv#?mjgIT_fx4eQs znNxixEtxUPNI~T*iqq5Q^xyyKNu_e~>*vX(`}=)-eEBXF^o_c@g6_~R{j0u08ga*m zyFNVh;gJuoeR#ll!Z>7fOI}G%FM1Cc;2n4met?aQqoWt*fu>6$lBi@;@=;<*vJzWT zkbIK}a3A!65D0@9=m!H}5DbB*;2C%cM!*NK1=1h`K7r352flz^@D=32cQ8CWIyyEs zK0YxqIXN{Ik55m}%*@Wt&CSm*EG#Z25=%?V%PT9ZtI1?4wYIjtzP-J(v$t0)mP+Mv zrLw=@^SJlb5;ELdp~)uXYn9t}tOtDhP6 zsMVC=M0_NXx62ih&Dgn|T`Fk!NL~+B6>1_pQ1%9oPK%tJpva)eqzJ*8ajW$Zy-A+j z9d7-dRlT&^&aS_|dcFursc>?BwB#5`iBNHsBW z*2#GkxzAWqA>*tb(%72!6tMe?GiT+LO}Y8m zG9mYCGYXpb}6KE2$^t&U0Bo zn+8RVHPEO|MS^k$MJ7cE>c!Gt^`~^_UuOcH33MiK{u79pJyjD|q!s52th@SzICl28 J7IxCt{s2GBxzGRr diff --git a/syft/pkg/cataloger/binary/test-fixtures/classifiers/positive/httpd-2.4.54/httpd b/syft/pkg/cataloger/binary/test-fixtures/classifiers/positive/httpd-2.4.54/httpd deleted file mode 100644 index d121fdbd61dfcb71d19b3228273e9c72a934fa95..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 652 zcmYjP+lt#T5cPAuVu)XM!EvmMF9}It)7>r$A+%&$x|C96X%vfkZ6nKV(yy=FG;Q@D zh8dlsnR6x#LpWlCRyb5po}ri4bk678Oq-J%EYAAIbRD|5uRu6>9uV$P0$BiIOO`Iv z93BqOKoiO!48utX+SJ&HS6ss7RL*tE=le>~G`nU27!sn(GShLMNi6 zJTG}c^PEY=2&KHhvdH`cni6Clqesf|D=>|2|FAyn-a^J_rE#!3Y@ss_=2JB$8?d2Py!&ucaF)!{U| zFvWcv(+IYMsnyf{XFnkMvMz`$P!W_#q6*0qmZV~lGOATx=u{~wGo5NKBG9dc$Nh)- zZlnYj(>RIXhjA4sEQjOQaj*!Q)JJcZ1pT!pN}vP3RM1||j&gTYYGf&mDCl%9cZT7FS#Zem`%k%5s> zyn$srkTf)nH#X2sGB5zCVqjpDX0|o~(yRTs0?c=3gsDB2Jbff%lQ>K iC#i9g(Y4Ss&@(pC2QicLb93|a^pkTk nQ}asV3vx=+GxPM4lNt0&i;MJg@{<#DAbRw3GL!Tn(hQye3?U$f diff --git a/syft/pkg/cataloger/binary/test-fixtures/classifiers/positive/nginx-1.25.1/nginx b/syft/pkg/cataloger/binary/test-fixtures/classifiers/positive/nginx-1.25.1/nginx deleted file mode 100644 index 6311b0515cedb3e623de1e56834b671143899dab..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 837 zcmd6lu~Ne@42GHe6dK_!O|RUsWMN`$7mnQ|isL)Sa&4vb@sV88OUl5C7u%A)U-ExG zMs^f(vjNz?R@(vQ)c_AJ!+<_&?mWkJZy*o!1!qiIU@)Nryg1gnk3Z^K3ca&aLZEAB zX@lX0^BQN&3^QVM(p9tfzp5+frZIx!6?R%DOPZr99NK#A_m<(nNHQB6k_i#H#MFE z(eMC|9rkAO+`!>@czaR;p?4mG8BrMR&v1Q#CtFerNJ4p6vb7uw-u}kdZmar2LX*2- zUAWYGEE*O%m#}4b7Qe0|SWlng$s$e@1NC=4s`zH}@Q+t{>io|eDA(P-etxO<%elV+ D&cM__ diff --git a/syft/pkg/cataloger/binary/test-fixtures/classifiers/positive/nginx-openresty-1.21.4.2/nginx b/syft/pkg/cataloger/binary/test-fixtures/classifiers/positive/nginx-openresty-1.21.4.2/nginx deleted file mode 100644 index 79aa8cda4c4f8e2dcfd51ec129d9125d29e93cda..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1425 zcmd5)O>fjN5VbgR;s(c&(Mqk_-L@-E6%ufPOAkmuFV!lz@g%j#+V0p{b}4@i@ss!q zOybQ4-L~R{h$7F-oA<`gPK0QmUq64O_o0dziT!sg)3KBI=ij=?vd<1ucD#+u-Da=1 z>?hlJJg8qL&20z&c(14O!`K1u{_Oi05RBaUcBFB$!k32K=^e)Re{BcYB6jX_)kk}W~ bS68d^`0;uH7d$`kucoRd_uvT&vtIlL5UPb) diff --git a/syft/pkg/cataloger/binary/test-fixtures/classifiers/positive/node-19.2.1/node b/syft/pkg/cataloger/binary/test-fixtures/classifiers/positive/node-19.2.1/node deleted file mode 100644 index 9e7608b56..000000000 --- a/syft/pkg/cataloger/binary/test-fixtures/classifiers/positive/node-19.2.1/node +++ /dev/null @@ -1,2 +0,0 @@ -# this should match node 19.2.1 -node.js/v19.2.1 diff --git a/syft/pkg/cataloger/binary/test-fixtures/classifiers/positive/openjdk-1.8.0/java b/syft/pkg/cataloger/binary/test-fixtures/classifiers/positive/openjdk-1.8.0/java deleted file mode 100644 index 1193a1ef5281dd536e34f2461f52a3c48ee3b674..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 39 rcmZQzU}Ruo$S+9E%Sy>+$Vx0rWH8jT0AW3YcwBLljloIPBF;$2*w zLfsks{6k!=6aq4nvr|(PN(&TJi>-i|A-^CsFDoUR0c0wJft~?_p`o6Eo}sz6g)Yzz S23;@R++vGd21aRSYc2rv(;^N4 diff --git a/syft/pkg/cataloger/binary/test-fixtures/classifiers/positive/php-apache-8.2.1/libphp.so b/syft/pkg/cataloger/binary/test-fixtures/classifiers/positive/php-apache-8.2.1/libphp.so deleted file mode 100644 index 8d3b0c698..000000000 --- a/syft/pkg/cataloger/binary/test-fixtures/classifiers/positive/php-apache-8.2.1/libphp.so +++ /dev/null @@ -1,5 +0,0 @@ -[null] Script: '%s' -%s,%s -X-Powered-By: PHP/8.2.1 -index pointer -PHP_VERSION diff --git a/syft/pkg/cataloger/binary/test-fixtures/classifiers/positive/php-cli-8.2.1/php b/syft/pkg/cataloger/binary/test-fixtures/classifiers/positive/php-cli-8.2.1/php deleted file mode 100644 index 8d3b0c698..000000000 --- a/syft/pkg/cataloger/binary/test-fixtures/classifiers/positive/php-cli-8.2.1/php +++ /dev/null @@ -1,5 +0,0 @@ -[null] Script: '%s' -%s,%s -X-Powered-By: PHP/8.2.1 -index pointer -PHP_VERSION diff --git a/syft/pkg/cataloger/binary/test-fixtures/classifiers/positive/php-fpm-8.2.1/php-fpm b/syft/pkg/cataloger/binary/test-fixtures/classifiers/positive/php-fpm-8.2.1/php-fpm deleted file mode 100644 index 8d3b0c698..000000000 --- a/syft/pkg/cataloger/binary/test-fixtures/classifiers/positive/php-fpm-8.2.1/php-fpm +++ /dev/null @@ -1,5 +0,0 @@ -[null] Script: '%s' -%s,%s -X-Powered-By: PHP/8.2.1 -index pointer -PHP_VERSION diff --git a/syft/pkg/cataloger/binary/test-fixtures/classifiers/positive/postgresql-15.1/postgres b/syft/pkg/cataloger/binary/test-fixtures/classifiers/positive/postgresql-15.1/postgres deleted file mode 100644 index 149da9050f13a0ddbb309a5ab4285b06ccaea3e7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16 XcmZPw$S*EQFG>v#^ieQ0)iVSDE3O2( diff --git a/syft/pkg/cataloger/binary/test-fixtures/classifiers/positive/postgresql-15beta4/postgres b/syft/pkg/cataloger/binary/test-fixtures/classifiers/positive/postgresql-15beta4/postgres deleted file mode 100644 index 50f6b3d2dd49b7a9273e0918214e3c2921a32acd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 19 acmZPw$S*EQFG>v#^ieQ0O-e0EGywoU0tPDp diff --git a/syft/pkg/cataloger/binary/test-fixtures/classifiers/positive/postgresql-9.5alpha1/postgres b/syft/pkg/cataloger/binary/test-fixtures/classifiers/positive/postgresql-9.5alpha1/postgres deleted file mode 100644 index 1188fb403..000000000 --- a/syft/pkg/cataloger/binary/test-fixtures/classifiers/positive/postgresql-9.5alpha1/postgres +++ /dev/null @@ -1,5 +0,0 @@ -byteaout -byteain -?PostgreSQL 9.5alpha1 on x86_64-unknown-linux-gnu, compiled by gcc (Debian 4.9.2-10) 4.9.2, 64-bit -/tmp/buildd/postgresql-9.5-9.5~alpha1/build/../src/backend/utils/adt/windowfuncs.c -argument of ntile must be greater than zero diff --git a/syft/pkg/cataloger/binary/test-fixtures/classifiers/positive/postgresql-9.6.24/postgres b/syft/pkg/cataloger/binary/test-fixtures/classifiers/positive/postgresql-9.6.24/postgres deleted file mode 100644 index cc29b7ae893cf0e7a87dca37dc126988c11a79ee..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18 ZcmZPw$S*EQFG>v#^iiv@vt$T}4Ds;y^YnN1bM|-f^mAu0)-%&HX0RzJN=?hGu+z`UOwxy_ Rj?jx>2mtF-P%Y+S007lR6v+Sp diff --git a/syft/pkg/cataloger/binary/test-fixtures/classifiers/positive/python-binary-lib-3.7/libpython3.7.so b/syft/pkg/cataloger/binary/test-fixtures/classifiers/positive/python-binary-lib-3.7/libpython3.7.so deleted file mode 100644 index b97a0767bf748e50557fa98193674ebece7b60c6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 69 zcmXS7D5xyS$j>v@vt$T}4Ds;y^YnN1bM|-f^mAu0)-%^LVX!GEN=?hGu+z`UOwxy_ Rj?jx>2mtF-P%Y+S007mG6w3er diff --git a/syft/pkg/cataloger/binary/test-fixtures/classifiers/positive/python-duplicates/libpython3.8.so b/syft/pkg/cataloger/binary/test-fixtures/classifiers/positive/python-duplicates/libpython3.8.so deleted file mode 100644 index a1b0d2429480c7504bf546011a15435fd900d33c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 122 zcmY$$P0Y+w$jmEAEh;EV1(FQOiFxWJ3b~2dsS0VCMa3lwB^gDji75;|&hd^uJ`Bcs z7J7ze48 RRE2=Z5D$O9aK|7&E&$|XC_exI diff --git a/syft/pkg/cataloger/binary/test-fixtures/classifiers/positive/redis-server-2.8.23/redis-server b/syft/pkg/cataloger/binary/test-fixtures/classifiers/positive/redis-server-2.8.23/redis-server deleted file mode 100644 index f56e59bbf678a2663f08946ae4574cf01208c0c8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7025 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 diff --git a/syft/pkg/cataloger/binary/test-fixtures/classifiers/positive/redis-server-5.0.0/redis-server b/syft/pkg/cataloger/binary/test-fixtures/classifiers/positive/redis-server-5.0.0/redis-server deleted file mode 100644 index 124d42a598f5d504cbc6f1dda3662cc2df497e55..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7061 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 GBhK$D zS%qdlbh|KU$8S-9{=|-rOx-_r4op8a8y<)cEl>SIX$=r(Bss$a**8?8n77Wkx zZm~lxM2&LDe}Dfv{QBYRAf6CwjGqNz5V9z0pGWhIo@cZb{e9X#Yq$S8uc2W`2K~XO zVR8kHFY)vx88^vQJe$NHhZFac^lxHvJsgdo%ZpB-wCxeV@d56p@dUc1VOpk3R(q${ z!`qv9pKCOn&fs1ZmMdu>2!aQ4m)!P|OsW~WmM@tqZ4d7MnG9#~OMf(aAd~oZ^aUE@ zngtQ*bRsfPQnK7hhZRTuGBuWI5X#tq^z)n* zmQl#}D67CT`-o>c9wn;P!zxj?d*144Hh;{7$`_A?GNf`8V)IyCVYqMtW382jmF5;D z0;b%l#H(cpW(*xEUs8B;0mi_nn0Ae5V%!JHO)Uxe+*ZU^Jek05J5x9*ZDN&z zj3Yt{E*WU{y=2B>>9Nobnd+x}r>I6Qvr;VZyrr~YtVVebhcvy(%K5$f&)l&d9PRyw z_k>HluAIUFk(4qmT`l*yT#{ueEO#z!74)zQ^`3iJy=9%WitIXDCp~oC?Rr|D3+$#~ zqrW%tRh+oMp|6XiH{SKeP`h61<~0P j@v8;R3vY|BeZ5|H$Q$>B6HNcvJ@bZ;*qhuF^!VsMCHZ^~ diff --git a/syft/pkg/cataloger/binary/test-fixtures/classifiers/positive/redis-server-7.0.14/redis-server b/syft/pkg/cataloger/binary/test-fixtures/classifiers/positive/redis-server-7.0.14/redis-server deleted file mode 100644 index 68dae86a938b5803d1c6dd158d7a19d1e170570c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 890 zcmbtSO-~y!5H*Dhf!;W9=)qOBRU&1hO~gltniWx%^b+92Ioh?SVAj|x+shIz{0{nS z`ZId#mHdijoFziyNGv^Bn)lwkvBr<%>EzSK23eg=5;wMU19v7VB`7N%U_gUj(Z*^r zmpb7zI4l~q{6XYWSoaHDGjG%HcZn>(-)LN3SZI0WJ6#5Iq_bL;$y&AhXHlK5fxR`n zKKBb^>jOAI&pzU84K&yA`rPNIMfL9k=%d%~X9rQQ^lw#F|3}g5A%T?l$Q^g0PWK=! zgyflUHc>p)_hI+wq~DLC!{gpc9}xwv)Fu<^s>28__{v?=ct|5Mx|oFi_aGB8DL^^$ zqfnXBrHV`mn~4eT2e*g?RF z4&%b24%1l}8~8m-rDoYI*On{`xt!0^xdTgwe!#IY+R)Mnha*yKSx@XEeh|f~9%^~LOjZk* zwZ>m_RXo5^)5v0>rj$XC?Ca70IwbTZgIJvlwMUD25Gj4NGyFYqnUA0L`IU!-1eaK$ zedu4wT&lU^67mbp-HSnKzKu<{P2+Vc?Qff9SS#PQ=uMv7?h~_+=$~pI_h4BfD Cq3A~d diff --git a/syft/pkg/cataloger/binary/test-fixtures/classifiers/positive/redis-server-7.2.3-arm64/redis-server b/syft/pkg/cataloger/binary/test-fixtures/classifiers/positive/redis-server-7.2.3-arm64/redis-server deleted file mode 100644 index 15ad151acb127f38b9e7cc55e09a8cf56d5981e6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 816 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 W;f^5K8V^R`_%GK}1(XZ#6aE(%O>$uX diff --git a/syft/pkg/cataloger/binary/test-fixtures/classifiers/positive/rust-1.67.1/toolchains/stable-aarch64-apple-darwin/lib/libstd-16f2b65e77054c42.dylib b/syft/pkg/cataloger/binary/test-fixtures/classifiers/positive/rust-1.67.1/toolchains/stable-aarch64-apple-darwin/lib/libstd-16f2b65e77054c42.dylib deleted file mode 100644 index d5949c118f02fee7c802bd96390c0d20913063f0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 28955 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 diff --git a/syft/pkg/cataloger/binary/test-fixtures/classifiers/positive/traefik-1.7.34/traefik b/syft/pkg/cataloger/binary/test-fixtures/classifiers/positive/traefik-1.7.34/traefik deleted file mode 100644 index 12602288d828264925ff25667ed4e1df060a2436..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9 QcmZQ5Gt@KJGd5uW00{5_q5uE@ diff --git a/syft/pkg/cataloger/binary/test-fixtures/classifiers/positive/traefik-2.9.6/traefik b/syft/pkg/cataloger/binary/test-fixtures/classifiers/positive/traefik-2.9.6/traefik deleted file mode 100644 index f5b1dc0ccff056e281cb387af90705dc96040677..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7 OcmZQD(zDbvV*mgH^8o$; diff --git a/syft/pkg/cataloger/binary/test-fixtures/classifiers/snippets/haproxy/2.7.3/linux-amd64/haproxy b/syft/pkg/cataloger/binary/test-fixtures/classifiers/snippets/haproxy/2.7.3/linux-amd64/haproxy index 0f150f2b31260f13d90b7518f4baeadfe64afd66..c3741bd552363335991e45e87c7442b07776dfad 100644 GIT binary patch delta 74 zcmV~$!4ZHU3$eq9Fi$ Wkh!~NP?v1XU^q#&o@8kC{nigqLl#c} diff --git a/syft/pkg/cataloger/binary/test-fixtures/classifiers/snippets/java-jre-openjdk/1.8.0_352-b08/linux-amd64/java b/syft/pkg/cataloger/binary/test-fixtures/classifiers/snippets/java-jre-openjdk/1.8.0_352-b08/linux-amd64/java new file mode 100644 index 0000000000000000000000000000000000000000..4a09e1605e99d8d964e828e8e86de393b339d455 GIT binary patch literal 325 zcmXxfJ4ysW5C-60#iV01lZJ_1s;VFMjH#iK9zgn0?e03x4D6t2Z0J!8J;Gi~#$M2Z zpD*~Ks2ajEcWM`2f*ecP^V}&SK-u%~IBzE_WZvLLxz;w;=IWz7t7H_v^gbf!8xK3 z(J%&XGkPxUt&JunFla&h;IouX)2R41v-&$z&7&$~-;b}VR#KdZapGZ@pTzM?fop%v x8XmNz%LrbG)y3&G2qDgDK7N+vw)$P2tB2}m)hx^MRlTVms^>MwS-szh)i0q6T^axY literal 0 HcmV?d00001 diff --git a/syft/pkg/cataloger/binary/test-fixtures/classifiers/snippets/java-jre-openjdk/11.0.17/linux-amd64/java b/syft/pkg/cataloger/binary/test-fixtures/classifiers/snippets/java-jre-openjdk/11.0.17/linux-amd64/java new file mode 100644 index 0000000000000000000000000000000000000000..74e31cdf139bf8ea34798713e624bf2820482e20 GIT binary patch literal 325 zcmXxfOG*SW5C-6gxXId`o50{oW=JKeq|@F&TnKsq(@Djdv8Q{W8y~muNFKvuxL1rB z(1PMy{8UjjgdMeF8=e9mbDn5!g+`-zPs78!ZUsomr(v_-(|o%Q3T-Q-iR5C?9y+ql zk&S3{LTtd0H>631uF=6enKCA?u|WW-F@g0l7|HXdr~hSE=Oh&XrQqtU=`;a#5kqHV z6Ac;(%6nyER)Hcyz%Bwx3&w#1g`6)I3(>vKB>v76^C044&sT4c0CgTln%H!QVV}=-=bGY9Eqb{4~!PU&o;obqmH+Okh(8%XnQeQ^-J30I>OU#u)vn&I3j|hJ>hyiSHF5DoU wXx@<1Y1^@s6 literal 0 HcmV?d00001 diff --git a/syft/pkg/cataloger/binary/test-fixtures/classifiers/snippets/ruby/1.9.3p551/linux-amd64/ruby b/syft/pkg/cataloger/binary/test-fixtures/classifiers/snippets/ruby/1.9.3p551/linux-amd64/ruby new file mode 100644 index 0000000000000000000000000000000000000000..a91aecbd6cc2cd18f429cf4352ef1825b302eb8f GIT binary patch literal 328 zcmYjM%TB{U5Q{kOSB%sHa7Z7lB!Li{dBm%e&z!*A6ZE6X9UNyCw^=b0FXSD}J%pKHVq#*l z?#_;teD!|?KQ)AVY(;qpNZlPDiPl(J0meJ8l;=GTw`JK1B_&@E-D-v9W*IctR*-d& zJtosQAWY-|Vsh9dV^x&WHAXsz050rhPJ{?v$K)mC+$hPZ>+!z~YD(HFB7-sR>V0a^ zXtV*Xg=|S{tW%?P&`GIiYVVxN5LIoown&Qes;WeMDk$bRMHvN+eLp^m-H9`H$_}$p v3%4*edp$qom)Yl;mowSt=K5^6KY#xoP3q(4c;egF$wYj=*z;-%jBU4nnYB@l literal 0 HcmV?d00001 diff --git a/syft/pkg/cataloger/binary/test-fixtures/classifiers/snippets/traefik/2.9.6/linux-amd64/traefik b/syft/pkg/cataloger/binary/test-fixtures/classifiers/snippets/traefik/2.9.6/linux-amd64/traefik new file mode 100644 index 0000000000000000000000000000000000000000..d5fcd2c227c5a1dbed11c5846e8f202a6e7048b0 GIT binary patch literal 332 zcmXwzO-{rx3`V;{%8CUCh%^$*QS6EHQ+f%+mQCC^GZm$+m`aEp++er?E6z!!3En(E z*|NVWy-KUsw 0 { for _, arg := range args { binaryFromImageCfg := appConfig.GetBinaryFromImage(arg, "") diff --git a/syft/pkg/cataloger/binary/test-fixtures/manager/internal/cli/commands/list.go b/syft/pkg/cataloger/binary/test-fixtures/manager/internal/cli/commands/list.go index 82b127167..6757794b3 100644 --- a/syft/pkg/cataloger/binary/test-fixtures/manager/internal/cli/commands/list.go +++ b/syft/pkg/cataloger/binary/test-fixtures/manager/internal/cli/commands/list.go @@ -2,15 +2,16 @@ package commands import ( "fmt" - "github.com/anchore/syft/syft/pkg/cataloger/binary/test-fixtures/manager/internal" - "github.com/anchore/syft/syft/pkg/cataloger/binary/test-fixtures/manager/internal/config" + "strings" + "github.com/jedib0t/go-pretty/v6/table" "github.com/spf13/cobra" - "strings" + + "github.com/anchore/syft/syft/pkg/cataloger/binary/test-fixtures/manager/internal" + "github.com/anchore/syft/syft/pkg/cataloger/binary/test-fixtures/manager/internal/config" ) func List(appConfig config.Application) *cobra.Command { - var showPaths bool cmd := &cobra.Command{ @@ -18,7 +19,6 @@ func List(appConfig config.Application) *cobra.Command { Short: "list managed binaries and managed/unmanaged snippets", Args: cobra.NoArgs, RunE: func(cmd *cobra.Command, args []string) error { - return runList(appConfig, showPaths) }, } @@ -29,7 +29,6 @@ func List(appConfig config.Application) *cobra.Command { } func runList(appConfig config.Application, showPaths bool) error { - material, err := internal.ListAllEntries(appConfig) if err != nil { return err @@ -42,6 +41,8 @@ func runList(appConfig config.Application, showPaths bool) error { return nil } +const yes = "yes" + func renderCatalogerListTable(material map[internal.LogicalEntryKey]internal.EntryInfo, showPaths bool) string { t := table.NewWriter() t.SetStyle(table.StyleLight) @@ -54,7 +55,7 @@ func renderCatalogerListTable(material map[internal.LogicalEntryKey]internal.Ent isConfigured := "" if info.IsConfigured { - isConfigured = "yes" + isConfigured = yes } bin := "" @@ -64,11 +65,11 @@ func renderCatalogerListTable(material map[internal.LogicalEntryKey]internal.Ent snippet = info.SnippetPath } else { if info.BinaryPath != "" { - bin = "yes" + bin = yes } if info.SnippetPath != "" { - snippet = "yes" + snippet = yes } } diff --git a/syft/pkg/cataloger/binary/test-fixtures/manager/internal/cli/commands/root.go b/syft/pkg/cataloger/binary/test-fixtures/manager/internal/cli/commands/root.go index b240868e9..4c4aa9148 100644 --- a/syft/pkg/cataloger/binary/test-fixtures/manager/internal/cli/commands/root.go +++ b/syft/pkg/cataloger/binary/test-fixtures/manager/internal/cli/commands/root.go @@ -1,8 +1,9 @@ package commands import ( - "github.com/anchore/syft/syft/pkg/cataloger/binary/test-fixtures/manager/internal/config" "github.com/spf13/cobra" + + "github.com/anchore/syft/syft/pkg/cataloger/binary/test-fixtures/manager/internal/config" ) func Root(_ config.Application) *cobra.Command { diff --git a/syft/pkg/cataloger/binary/test-fixtures/manager/internal/cli/commands/write_snippet.go b/syft/pkg/cataloger/binary/test-fixtures/manager/internal/cli/commands/write_snippet.go index a0880455c..400f7d2ea 100644 --- a/syft/pkg/cataloger/binary/test-fixtures/manager/internal/cli/commands/write_snippet.go +++ b/syft/pkg/cataloger/binary/test-fixtures/manager/internal/cli/commands/write_snippet.go @@ -5,14 +5,16 @@ import ( "debug/macho" "debug/pe" "fmt" - "github.com/anchore/syft/syft/pkg/cataloger/binary/test-fixtures/manager/internal" - "github.com/anchore/syft/syft/pkg/cataloger/binary/test-fixtures/manager/internal/config" - "github.com/spf13/cobra" - "gopkg.in/yaml.v3" "io" "os" "path/filepath" "strings" + + "github.com/spf13/cobra" + "gopkg.in/yaml.v3" + + "github.com/anchore/syft/syft/pkg/cataloger/binary/test-fixtures/manager/internal" + "github.com/anchore/syft/syft/pkg/cataloger/binary/test-fixtures/manager/internal/config" ) func WriteSnippet(appConfig config.Application) *cobra.Command { @@ -102,7 +104,7 @@ func runWriteSnippet(binaryPath string, offset, length int, snippetPath string) return fmt.Errorf("unable to marshal metadata: %w", err) } - splitter := []byte(fmt.Sprintf("\n### byte snippet to follow ###\n")) + splitter := []byte("\n### byte snippet to follow ###\n") var finalBuf []byte finalBuf = append(finalBuf, metadataBytes...) @@ -113,7 +115,7 @@ func runWriteSnippet(binaryPath string, offset, length int, snippetPath string) return fmt.Errorf("unable to create destination directory: %w", err) } - if err := os.WriteFile(snippetPath, finalBuf, 0644); err != nil { + if err := os.WriteFile(snippetPath, finalBuf, 0600); err != nil { return fmt.Errorf("unable to write snippet: %w", err) } @@ -195,6 +197,11 @@ func getPlatform(binaryPath string) (string, error) { return "", fmt.Errorf("unable to determine platform for %q", binaryPath) } +const ( + amd64 = "amd64" + arm64 = "arm64" +) + func getPlatformElf(f *os.File) string { elfFile, err := elf.NewFile(f) if err != nil { @@ -204,9 +211,9 @@ func getPlatformElf(f *os.File) string { var arch string switch elfFile.Machine { case elf.EM_X86_64: - arch = "amd64" + arch = amd64 case elf.EM_AARCH64: - arch = "arm64" + arch = arm64 // TODO... default: arch = fmt.Sprintf("unknown-%x", elfFile.Machine) @@ -224,9 +231,9 @@ func getPlatformMac(f *os.File) string { var arch string switch machoFile.Cpu { case macho.CpuAmd64: - arch = "amd64" + arch = amd64 case macho.CpuArm64: - arch = "arm64" + arch = arm64 // TODO... default: arch = fmt.Sprintf("unknown-%x", machoFile.Cpu) @@ -244,9 +251,9 @@ func getPlatformWindows(f *os.File) string { var arch string switch peFile.Machine { case pe.IMAGE_FILE_MACHINE_AMD64: - arch = "amd64" + arch = amd64 case pe.IMAGE_FILE_MACHINE_ARM64: - arch = "arm64" + arch = arm64 // TODO... default: arch = fmt.Sprintf("unknown-%x", peFile.Machine) diff --git a/syft/pkg/cataloger/binary/test-fixtures/manager/internal/config/application.go b/syft/pkg/cataloger/binary/test-fixtures/manager/internal/config/application.go index 54473351a..d18663629 100644 --- a/syft/pkg/cataloger/binary/test-fixtures/manager/internal/config/application.go +++ b/syft/pkg/cataloger/binary/test-fixtures/manager/internal/config/application.go @@ -2,12 +2,13 @@ package config import ( "fmt" - "github.com/hashicorp/go-multierror" - "github.com/scylladb/go-set/strset" - "gopkg.in/yaml.v3" "os" "path/filepath" "strings" + + "github.com/hashicorp/go-multierror" + "github.com/scylladb/go-set/strset" + "gopkg.in/yaml.v3" ) const Path = "config.yaml" @@ -96,7 +97,6 @@ func (c Application) Validate() error { if len(entry.PathsInImage) == 0 { err = multierror.Append(err, fmt.Errorf("missing paths for entry %d (%s)", i+1, key)) } - } return err } diff --git a/syft/pkg/cataloger/binary/test-fixtures/manager/internal/config/binary_from_image.go b/syft/pkg/cataloger/binary/test-fixtures/manager/internal/config/binary_from_image.go index ea873707d..f26ac3ae4 100644 --- a/syft/pkg/cataloger/binary/test-fixtures/manager/internal/config/binary_from_image.go +++ b/syft/pkg/cataloger/binary/test-fixtures/manager/internal/config/binary_from_image.go @@ -3,9 +3,10 @@ package config import ( "crypto/sha256" "fmt" - "gopkg.in/yaml.v3" "path/filepath" "strings" + + "gopkg.in/yaml.v3" ) type BinaryFromImage struct { diff --git a/syft/pkg/cataloger/binary/test-fixtures/manager/internal/download_from_image.go b/syft/pkg/cataloger/binary/test-fixtures/manager/internal/download_from_image.go index e64880be6..c5f52ff63 100644 --- a/syft/pkg/cataloger/binary/test-fixtures/manager/internal/download_from_image.go +++ b/syft/pkg/cataloger/binary/test-fixtures/manager/internal/download_from_image.go @@ -1,13 +1,16 @@ package internal import ( + "encoding/json" "fmt" - "github.com/anchore/syft/syft/pkg/cataloger/binary/test-fixtures/manager/internal/config" - "github.com/anchore/syft/syft/pkg/cataloger/binary/test-fixtures/manager/internal/ui" - "github.com/google/uuid" "os" "os/exec" "path/filepath" + + "github.com/google/uuid" + + "github.com/anchore/syft/syft/pkg/cataloger/binary/test-fixtures/manager/internal/config" + "github.com/anchore/syft/syft/pkg/cataloger/binary/test-fixtures/manager/internal/ui" ) func DownloadFromImage(dest string, config config.BinaryFromImage) error { @@ -19,9 +22,8 @@ func DownloadFromImage(dest string, config config.BinaryFromImage) error { if !isDownloadStale(config, hostPaths) { t.Skip("already exists") return nil - } else { - t.Update("stale, updating...") } + t.Update("stale, updating...") } if err := pullDockerImages(config.Images); err != nil { @@ -78,24 +80,62 @@ func pullDockerImages(images []config.Image) error { return nil } +type imageInspect struct { + OS string `json:"Os"` + Architecture string `json:"Architecture"` +} + +func (i imageInspect) Platform() string { + return fmt.Sprintf("%s/%s", i.OS, i.Architecture) +} + func pullDockerImage(imageReference, platform string) error { a := ui.Action{Msg: fmt.Sprintf("pull image %s (%s)", imageReference, platform)} a.Start() - cmd := exec.Command("docker", "image", "inspect", imageReference) - if err := cmd.Run(); err == nil { - a.Skip(fmt.Sprintf("docker image already exists %q", imageReference)) + matches, _, _ := checkArchitecturesMatch(imageReference, platform) + if matches { + a.Skip(fmt.Sprintf("docker image already exists %q", imageReference)) return nil } - cmd = exec.Command("docker", "pull", "--platform", platform, imageReference) + cmd := exec.Command("docker", "pull", "--platform", platform, imageReference) err := cmd.Run() + if err != nil { + a.Done(err) + return err + } + + matches, gotPlatform, err := checkArchitecturesMatch(imageReference, platform) + if !matches && err == nil { + err = fmt.Errorf("image %q pulled but does not match expected platform %q != %q", imageReference, platform, gotPlatform) + } a.Done(err) return err } +func checkArchitecturesMatch(imageReference, platform string) (bool, string, error) { + cmd := exec.Command("docker", "image", "inspect", imageReference) + out, err := cmd.CombinedOutput() + if err != nil { + return false, "", err + } + + var inspect []imageInspect + if err := json.Unmarshal(out, &inspect); err != nil { + return false, "", fmt.Errorf("unable to unmarshal image inspect: %w", err) + } + + if len(inspect) != 1 { + return false, "", fmt.Errorf("expected 1 image inspect, got %d", len(inspect)) + } + gotPlatform := inspect[0].Platform() + + return gotPlatform == platform, gotPlatform, nil +} + func copyBinariesFromDockerImages(config config.BinaryFromImage, destination string) (err error) { for _, image := range config.Images { if err := copyBinariesFromDockerImage(config, destination, image); err != nil { @@ -116,7 +156,7 @@ func copyBinariesFromDockerImage(config config.BinaryFromImage, destination stri defer func() { cmd := exec.Command("docker", "rm", containerName) - cmd.Run() + cmd.Run() // nolint:errcheck }() for i, destinationPath := range config.AllStorePathsForImage(image, destination) { @@ -130,7 +170,6 @@ func copyBinariesFromDockerImage(config config.BinaryFromImage, destination stri } func copyBinaryFromContainer(containerName, containerPath, destinationPath, fingerprint string) (err error) { - a := ui.Action{Msg: fmt.Sprintf("extract %s", containerPath)} a.Start() @@ -142,14 +181,15 @@ func copyBinaryFromContainer(containerName, containerPath, destinationPath, fing return err } - cmd := exec.Command("docker", "cp", fmt.Sprintf("%s:%s", containerName, containerPath), destinationPath) + cmd := exec.Command("docker", "cp", fmt.Sprintf("%s:%s", containerName, containerPath), destinationPath) // nolint:gosec + // reason for gosec exception: this is for processing test fixtures only, not used in production if err := cmd.Run(); err != nil { return err } // capture fingerprint file fingerprintPath := destinationPath + ".fingerprint" - if err := os.WriteFile(fingerprintPath, []byte(fingerprint), 0644); err != nil { + if err := os.WriteFile(fingerprintPath, []byte(fingerprint), 0600); err != nil { return fmt.Errorf("unable to write fingerprint file: %w", err) } diff --git a/syft/pkg/cataloger/binary/test-fixtures/manager/internal/list_entries.go b/syft/pkg/cataloger/binary/test-fixtures/manager/internal/list_entries.go index f07fc5dc0..5c8922e4b 100644 --- a/syft/pkg/cataloger/binary/test-fixtures/manager/internal/list_entries.go +++ b/syft/pkg/cataloger/binary/test-fixtures/manager/internal/list_entries.go @@ -2,11 +2,12 @@ package internal import ( "fmt" - "github.com/anchore/syft/syft/pkg/cataloger/binary/test-fixtures/manager/internal/config" "os" "path/filepath" "sort" "strings" + + "github.com/anchore/syft/syft/pkg/cataloger/binary/test-fixtures/manager/internal/config" ) type Entries map[LogicalEntryKey]EntryInfo @@ -89,7 +90,6 @@ func ListAllBinaries(appConfig config.Application) (Entries, error) { } func ListAllEntries(appConfig config.Application) (Entries, error) { - snippets, err := allFilePaths(appConfig.SnippetPath) if err != nil { return nil, fmt.Errorf("unable to list snippets: %w", err) @@ -155,7 +155,7 @@ func getLogicalKey(managedBinaryPath string) (*LogicalEntryKey, error) { // infer the logical key from the path alone: name/version/platform/filename items := SplitFilepath(managedBinaryPath) - if len(items) != 4 { + if len(items) < 4 { return nil, fmt.Errorf("invalid managed binary path: %q", managedBinaryPath) } @@ -163,7 +163,7 @@ func getLogicalKey(managedBinaryPath string) (*LogicalEntryKey, error) { OrgName: items[0], Version: items[1], Platform: items[2], - Filename: items[3], + Filename: filepath.Join(items[3:]...), }, nil } diff --git a/syft/pkg/cataloger/binary/test-fixtures/manager/internal/snippet_metadata.go b/syft/pkg/cataloger/binary/test-fixtures/manager/internal/snippet_metadata.go index 171db4a3b..d70de3e23 100644 --- a/syft/pkg/cataloger/binary/test-fixtures/manager/internal/snippet_metadata.go +++ b/syft/pkg/cataloger/binary/test-fixtures/manager/internal/snippet_metadata.go @@ -2,9 +2,10 @@ package internal import ( "fmt" - "gopkg.in/yaml.v3" "os" "strings" + + "gopkg.in/yaml.v3" ) type SnippetMetadata struct { diff --git a/syft/pkg/cataloger/binary/test-fixtures/manager/internal/ui/action.go b/syft/pkg/cataloger/binary/test-fixtures/manager/internal/ui/action.go index 00d6381e8..6f24bf506 100644 --- a/syft/pkg/cataloger/binary/test-fixtures/manager/internal/ui/action.go +++ b/syft/pkg/cataloger/binary/test-fixtures/manager/internal/ui/action.go @@ -30,7 +30,6 @@ func (a Action) Skip(newMsg ...string) { func (a Action) Done(err error) { goToPreviousLineStart() if err != nil { - fmt.Printf(" %s✗%s %s%s%s\n", red+bold, reset, red, a.Msg, reset) var exitError *exec.ExitError diff --git a/syft/pkg/cataloger/binary/test-fixtures/manager/internal/ui/binary_list.go b/syft/pkg/cataloger/binary/test-fixtures/manager/internal/ui/binary_list.go index b551ead9e..a914e74b1 100644 --- a/syft/pkg/cataloger/binary/test-fixtures/manager/internal/ui/binary_list.go +++ b/syft/pkg/cataloger/binary/test-fixtures/manager/internal/ui/binary_list.go @@ -2,10 +2,11 @@ package ui import ( "fmt" + "os" + "github.com/charmbracelet/bubbles/list" tea "github.com/charmbracelet/bubbletea" "github.com/charmbracelet/lipgloss" - "os" ) var quitTextStyle = lipgloss.NewStyle().Margin(1, 0, 2, 4) diff --git a/syft/pkg/cataloger/binary/test-fixtures/manager/main.go b/syft/pkg/cataloger/binary/test-fixtures/manager/main.go index d6b35fe3f..14b23f0da 100644 --- a/syft/pkg/cataloger/binary/test-fixtures/manager/main.go +++ b/syft/pkg/cataloger/binary/test-fixtures/manager/main.go @@ -2,9 +2,10 @@ package main import ( "fmt" + "os" + "github.com/anchore/syft/syft/pkg/cataloger/binary/test-fixtures/manager/internal/cli" "github.com/anchore/syft/syft/pkg/cataloger/binary/test-fixtures/manager/internal/ui" - "os" ) func main() { diff --git a/syft/pkg/cataloger/binary/test-fixtures/manager/testutil/snippet_or_binary.go b/syft/pkg/cataloger/binary/test-fixtures/manager/testutil/snippet_or_binary.go index a95df4f6c..aa194b3a1 100644 --- a/syft/pkg/cataloger/binary/test-fixtures/manager/testutil/snippet_or_binary.go +++ b/syft/pkg/cataloger/binary/test-fixtures/manager/testutil/snippet_or_binary.go @@ -1,12 +1,14 @@ package testutil import ( - "github.com/anchore/syft/syft/pkg/cataloger/binary/test-fixtures/manager/internal" - "github.com/anchore/syft/syft/pkg/cataloger/binary/test-fixtures/manager/internal/config" - "github.com/stretchr/testify/require" "os" "path/filepath" "testing" + + "github.com/stretchr/testify/require" + + "github.com/anchore/syft/syft/pkg/cataloger/binary/test-fixtures/manager/internal" + "github.com/anchore/syft/syft/pkg/cataloger/binary/test-fixtures/manager/internal/config" ) // SnippetOrBinary returns the path to either the binary or the snippet for the given logical entry key. @@ -96,5 +98,4 @@ func validateSnippet(t *testing.T, binaryPath, snippetPath string) { require.NoError(t, err) require.Equal(t, expected, metadata.FileSha256, "snippet shadows a binary with a different sha256") - }