(archivePath string, imageID string, skipObjects bool, topChangesMax int, doHashData bool, doDetectDuplicates bool, changeDataHashMatchers map[string]*ChangeDataHashMatcher, changePathMatchers []*ChangePathMatcher, changeDataMatchers map[string]*ChangeDataMatcher, utf8Detector *UTF8Detector, processorParams *ProcessorParams, )
| 516 | ) |
| 517 | |
| 518 | func LoadPackage(archivePath string, |
| 519 | imageID string, |
| 520 | skipObjects bool, |
| 521 | topChangesMax int, |
| 522 | doHashData bool, |
| 523 | doDetectDuplicates bool, |
| 524 | changeDataHashMatchers map[string]*ChangeDataHashMatcher, |
| 525 | changePathMatchers []*ChangePathMatcher, |
| 526 | changeDataMatchers map[string]*ChangeDataMatcher, |
| 527 | utf8Detector *UTF8Detector, |
| 528 | processorParams *ProcessorParams, |
| 529 | ) (*Package, error) { |
| 530 | imageID = dockerutil.CleanImageID(imageID) |
| 531 | |
| 532 | cpmDumps := hasChangePathMatcherDumps(changePathMatchers) |
| 533 | dv1ConfigObjectFileName := fmt.Sprintf("%s.json", imageID) |
| 534 | afile, err := os.Open(archivePath) |
| 535 | if err != nil { |
| 536 | log.Errorf("dockerimage.LoadPackage: os.Open error - %v", err) |
| 537 | return nil, err |
| 538 | } |
| 539 | |
| 540 | defer afile.Close() |
| 541 | |
| 542 | pkg := newPackage() |
| 543 | layers := map[string]*Layer{} |
| 544 | |
| 545 | archiveFiles := map[string]struct{}{} |
| 546 | var tarFileCount uint |
| 547 | var foundOCILayout bool |
| 548 | var foundBlobsDir bool |
| 549 | var foundIndex bool |
| 550 | var foundDockerManifest bool |
| 551 | var foundDockerV1Config bool |
| 552 | var foundDockerV1Layer bool |
| 553 | var ociImageManifestDesc *oci.Descriptor |
| 554 | |
| 555 | tr := tar.NewReader(afile) |
| 556 | for { |
| 557 | hdr, err := tr.Next() |
| 558 | if err != nil { |
| 559 | if errors.Is(err, io.EOF) { |
| 560 | break |
| 561 | } |
| 562 | |
| 563 | log.Errorf("dockerimage.LoadPackage: error reading archive(%v) enumerating files - %v", archivePath, err) |
| 564 | return nil, err |
| 565 | } |
| 566 | |
| 567 | tarFileCount++ |
| 568 | if hdr == nil || hdr.Name == "" { |
| 569 | log.Debugf("dockerimage.LoadPackage: ignoring bad tar header (%d)", tarFileCount) |
| 570 | continue |
| 571 | } |
| 572 | |
| 573 | hdr.Name = filepath.Clean(hdr.Name) |
| 574 | archiveFiles[hdr.Name] = struct{}{} |
| 575 | if hdr.Name == ociBlobDirName || |
no test coverage detected