mirror of
https://github.com/anchore/syft.git
synced 2025-11-17 08:23:15 +01:00
fix: read only single package.json or package-lock.json document
Previously, this used a for loop over a json decoder, reading N package.json objects from a file stream. Because a single file stream containing the JSON for more than one package.json is unexpected, and because on some filesystems the loop failed to exit, instead read a single package.json object from the decoder. Signed-off-by: Will Murphy <willmurphyscode@users.noreply.github.com>
This commit is contained in:
parent
f6605a3817
commit
e0bfd2f98a
@ -55,11 +55,8 @@ func parsePackageJSON(_ context.Context, _ file.Resolver, _ *generic.Environment
|
|||||||
var pkgs []pkg.Package
|
var pkgs []pkg.Package
|
||||||
dec := json.NewDecoder(reader)
|
dec := json.NewDecoder(reader)
|
||||||
|
|
||||||
for {
|
|
||||||
var p packageJSON
|
var p packageJSON
|
||||||
if err := dec.Decode(&p); errors.Is(err, io.EOF) {
|
if err := dec.Decode(&p); err != nil && !errors.Is(err, io.EOF) {
|
||||||
break
|
|
||||||
} else if err != nil {
|
|
||||||
return nil, nil, fmt.Errorf("failed to parse package.json file: %w", err)
|
return nil, nil, fmt.Errorf("failed to parse package.json file: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -69,7 +66,6 @@ func parsePackageJSON(_ context.Context, _ file.Resolver, _ *generic.Environment
|
|||||||
pkgs,
|
pkgs,
|
||||||
newPackageJSONPackage(p, reader.Location.WithAnnotation(pkg.EvidenceAnnotationKey, pkg.PrimaryEvidenceAnnotation)),
|
newPackageJSONPackage(p, reader.Location.WithAnnotation(pkg.EvidenceAnnotationKey, pkg.PrimaryEvidenceAnnotation)),
|
||||||
)
|
)
|
||||||
}
|
|
||||||
|
|
||||||
pkg.Sort(pkgs)
|
pkg.Sort(pkgs)
|
||||||
|
|
||||||
|
|||||||
@ -66,13 +66,9 @@ func (a genericPackageLockAdapter) parsePackageLock(_ context.Context, resolver
|
|||||||
dec := json.NewDecoder(reader)
|
dec := json.NewDecoder(reader)
|
||||||
|
|
||||||
var lock packageLock
|
var lock packageLock
|
||||||
for {
|
if err := dec.Decode(&lock); err != nil && !errors.Is(err, io.EOF) {
|
||||||
if err := dec.Decode(&lock); errors.Is(err, io.EOF) {
|
|
||||||
break
|
|
||||||
} else if err != nil {
|
|
||||||
return nil, nil, fmt.Errorf("failed to parse package-lock.json file: %w", err)
|
return nil, nil, fmt.Errorf("failed to parse package-lock.json file: %w", err)
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
if lock.LockfileVersion == 1 {
|
if lock.LockfileVersion == 1 {
|
||||||
for name, pkgMeta := range lock.Dependencies {
|
for name, pkgMeta := range lock.Dependencies {
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user