diff --git a/go.mod b/go.mod index cd7f8feee75..11de5cdc3c6 100644 --- a/go.mod +++ b/go.mod @@ -15,12 +15,12 @@ require ( github.com/anchore/bubbly v0.0.0-20231115134915-def0aba654a9 github.com/anchore/clio v0.0.0-20250319180342-2cfe4b0cb716 github.com/anchore/fangs v0.0.0-20250319222917-446a1e748ec2 - github.com/anchore/go-collections v0.0.0-20240216171411-9321230ce537 + github.com/anchore/go-collections v0.0.0-20251016125210-a3c352120e8c github.com/anchore/go-homedir v0.0.0-20250319154043-c29668562e4d github.com/anchore/go-logger v0.0.0-20250318195838-07ae343dd722 github.com/anchore/go-macholibre v0.0.0-20220308212642-53e6d0aaf6fb github.com/anchore/go-rpmdb v0.0.0-20250516171929-f77691e1faec - github.com/anchore/go-sync v0.0.0-20250326131806-4eda43a485b6 + github.com/anchore/go-sync v0.0.0-20251016131156-c92221f8e3da github.com/anchore/go-testutils v0.0.0-20200925183923-d5f45b0d3c04 github.com/anchore/go-version v1.2.2-0.20200701162849-18adb9c92b9b github.com/anchore/packageurl-go v0.1.1-0.20250220190351-d62adb6e1115 diff --git a/go.sum b/go.sum index 82fb633fe1c..7a7190019d1 100644 --- a/go.sum +++ b/go.sum @@ -116,8 +116,8 @@ github.com/anchore/clio v0.0.0-20250319180342-2cfe4b0cb716 h1:2sIdYJlQESEnyk3Y0W github.com/anchore/clio v0.0.0-20250319180342-2cfe4b0cb716/go.mod h1:Utb9i4kwiCWvqAIxZaJeMIXFO9uOgQXlvH2BfbfO/zI= github.com/anchore/fangs v0.0.0-20250319222917-446a1e748ec2 h1:GC2QaO0YsmjpsZ4rtVKv9DnproIxqqn+qkskpc+i8MA= github.com/anchore/fangs v0.0.0-20250319222917-446a1e748ec2/go.mod h1:XUbUECwVKuD3qYRUj+QZIOHjyyXua2gFmVjKA40iHXA= -github.com/anchore/go-collections v0.0.0-20240216171411-9321230ce537 h1:GjNGuwK5jWjJMyVppBjYS54eOiiSNv4Ba869k4wh72Q= -github.com/anchore/go-collections v0.0.0-20240216171411-9321230ce537/go.mod h1:1aiktV46ATCkuVg0O573ZrH56BUawTECPETbZyBcqT8= +github.com/anchore/go-collections v0.0.0-20251016125210-a3c352120e8c h1:eoJXyC0n7DZ4YvySG/ETdYkTar2Due7eH+UmLK6FbrA= +github.com/anchore/go-collections v0.0.0-20251016125210-a3c352120e8c/go.mod h1:1aiktV46ATCkuVg0O573ZrH56BUawTECPETbZyBcqT8= github.com/anchore/go-homedir v0.0.0-20250319154043-c29668562e4d h1:gT69osH9AsdpOfqxbRwtxcNnSZ1zg4aKy2BevO3ZBdc= github.com/anchore/go-homedir v0.0.0-20250319154043-c29668562e4d/go.mod h1:PhSnuFYknwPZkOWKB1jXBNToChBA+l0FjwOxtViIc50= github.com/anchore/go-logger v0.0.0-20250318195838-07ae343dd722 h1:2SqmFgE7h+Ql4VyBzhjLkRF/3gDrcpUBj8LjvvO6OOM= @@ -130,8 +130,8 @@ github.com/anchore/go-rpmdb v0.0.0-20250516171929-f77691e1faec h1:SjjPMOXTzpuU1Z github.com/anchore/go-rpmdb v0.0.0-20250516171929-f77691e1faec/go.mod h1:eQVa6QFGzKy0qMcnW2pez0XBczvgwSjw9vA23qifEyU= github.com/anchore/go-struct-converter v0.0.0-20221118182256-c68fdcfa2092 h1:aM1rlcoLz8y5B2r4tTLMiVTrMtpfY0O8EScKJxaSaEc= github.com/anchore/go-struct-converter v0.0.0-20221118182256-c68fdcfa2092/go.mod h1:rYqSE9HbjzpHTI74vwPvae4ZVYZd1lue2ta6xHPdblA= -github.com/anchore/go-sync v0.0.0-20250326131806-4eda43a485b6 h1:Ha+LSCVuXYSYGi7wIkJK6G8g6jI3LH7y6LbyEVyp4Io= -github.com/anchore/go-sync v0.0.0-20250326131806-4eda43a485b6/go.mod h1:+9oM3XUy8iea/vWj9FhZ9bQGUBN8JpPxxJm5Wbcx9XM= +github.com/anchore/go-sync v0.0.0-20251016131156-c92221f8e3da h1:aYQvxFDwxyCC/sSIiA60vajgSzUrb8cnlaFkXFfYsnc= +github.com/anchore/go-sync v0.0.0-20251016131156-c92221f8e3da/go.mod h1:e/h/U63/RNEtOya2nVAO6yi/2PRbddolwINtMbA+45g= github.com/anchore/go-testutils v0.0.0-20200925183923-d5f45b0d3c04 h1:VzprUTpc0vW0nnNKJfJieyH/TZ9UYAnTZs5/gHTdAe8= github.com/anchore/go-testutils v0.0.0-20200925183923-d5f45b0d3c04/go.mod h1:6dK64g27Qi1qGQZ67gFmBFvEHScy0/C8qhQhNe5B5pQ= github.com/anchore/go-version v1.2.2-0.20200701162849-18adb9c92b9b h1:e1bmaoJfZVsCYMrIZBpFxwV26CbsuoEh5muXD5I1Ods= diff --git a/internal/unknown/coordinate_error.go b/internal/unknown/coordinate_error.go index 46bc53e11b1..efd5d81d9d4 100644 --- a/internal/unknown/coordinate_error.go +++ b/internal/unknown/coordinate_error.go @@ -5,6 +5,7 @@ import ( "fmt" "strings" + "github.com/anchore/go-sync" "github.com/anchore/syft/internal/log" "github.com/anchore/syft/syft/file" ) @@ -184,18 +185,25 @@ func visitErrors(err error, fn func(error) error) error { // errors.Join omits nil errors and will return nil if all passed errors are nil return errors.Join(out...) } + // handle PanicErrors directly, since these are wrapped errors + if e, ok := err.(sync.PanicError); ok { + return fn(e) + } // unwrap singly wrapped errors if e, ok := err.(interface{ Unwrap() error }); ok { wrapped := e.Unwrap() - got := visitErrors(wrapped, fn) - if got == nil { - return nil - } - if wrapped.Error() != got.Error() { - prefix := strings.TrimSuffix(err.Error(), wrapped.Error()) - return fmt.Errorf("%s%w", prefix, got) + // if there is not a wrapped error, fall through to visit the error directly + if wrapped != nil { + got := visitErrors(wrapped, fn) + if got == nil { + return nil + } + if wrapped.Error() != got.Error() { + prefix := strings.TrimSuffix(err.Error(), wrapped.Error()) + return fmt.Errorf("%s%w", prefix, got) + } + return err } - return err } return fn(err) } diff --git a/syft/pkg/cataloger/generic/cataloger_test.go b/syft/pkg/cataloger/generic/cataloger_test.go index f4e5c479811..e31dd6b9713 100644 --- a/syft/pkg/cataloger/generic/cataloger_test.go +++ b/syft/pkg/cataloger/generic/cataloger_test.go @@ -183,9 +183,9 @@ func TestClosesFileOnParserPanic(t *testing.T) { upstreamCataloger: "unit-test-cataloger", } - assert.PanicsWithValue(t, "panic!", func() { - _, _, _ = c.Catalog(ctx, resolver) - }) + _, _, err := c.Catalog(ctx, resolver) + require.Error(t, err) + require.ErrorContains(t, err, "panic!") require.True(t, spy.closed) }