mirror of
https://github.com/anchore/syft.git
synced 2026-11-05 00:46:38 +01:00
* chore(deps): update tools to latest versions Signed-off-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> * chore: disable gosec(G115) A change to the rule gosec(G115) made a large amount of FP for gosec appear when updating to the latest golang-ci linter. https://github.com/securego/gosec/issues/1185 https://github.com/securego/gosec/pull/1149 We're going to ignore this rule for the time being while waiting for gosec to get updates so that bound checking and example snippets of `valid` code is added for this rule Signed-off-by: Christopher Phillips <32073428+spiffcs@users.noreply.github.com> --------- Signed-off-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> Signed-off-by: Christopher Phillips <32073428+spiffcs@users.noreply.github.com> Co-authored-by: spiffcs <32073428+spiffcs@users.noreply.github.com>
74 lines
1.7 KiB
Go
74 lines
1.7 KiB
Go
package php
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
"io"
|
|
|
|
"github.com/elliotchance/phpserialize"
|
|
|
|
"github.com/anchore/syft/internal/log"
|
|
"github.com/anchore/syft/syft/artifact"
|
|
"github.com/anchore/syft/syft/file"
|
|
"github.com/anchore/syft/syft/pkg"
|
|
"github.com/anchore/syft/syft/pkg/cataloger/generic"
|
|
)
|
|
|
|
// parsePeclSerialized is a parser function for PECL metadata contents, returning "Default" php packages discovered.
|
|
func parsePeclSerialized(_ context.Context, _ file.Resolver, _ *generic.Environment, reader file.LocationReadCloser) ([]pkg.Package, []artifact.Relationship, error) {
|
|
var pkgs []pkg.Package
|
|
data, err := io.ReadAll(reader)
|
|
|
|
if err != nil {
|
|
return nil, nil, fmt.Errorf("failed to read file: %w", err)
|
|
}
|
|
|
|
metadata, err := phpserialize.UnmarshalAssociativeArray(
|
|
data,
|
|
)
|
|
|
|
if err != nil {
|
|
return nil, nil, fmt.Errorf("failed to parse pecl metadata file: %w", err)
|
|
}
|
|
|
|
name, ok := metadata["name"].(string)
|
|
if !ok {
|
|
return nil, nil, fmt.Errorf("failed to parse pecl package name: %w", err)
|
|
}
|
|
|
|
version := readStruct(metadata, "version", "release")
|
|
license := readStruct(metadata, "license", "_content")
|
|
|
|
pkgs = append(
|
|
pkgs,
|
|
newPeclPackage(
|
|
pkg.PhpPeclEntry{
|
|
Name: name,
|
|
Version: version,
|
|
License: []string{
|
|
license,
|
|
},
|
|
},
|
|
reader.Location,
|
|
),
|
|
)
|
|
|
|
return pkgs, nil, nil
|
|
}
|
|
|
|
func readStruct(metadata any, fields ...string) string {
|
|
if len(fields) > 0 {
|
|
value, ok := metadata.(map[any]any)
|
|
if !ok {
|
|
log.Tracef("unable to read '%s' from: %v", fields[0], metadata)
|
|
return ""
|
|
}
|
|
return readStruct(value[fields[0]], fields[1:]...)
|
|
}
|
|
value, ok := metadata.(string)
|
|
if !ok {
|
|
log.Tracef("unable to read value from: %v", metadata)
|
|
}
|
|
return value
|
|
}
|