MCPcopy Create free account
hub / github.com/XmirrorSecurity/OpenSCA-cli / xzip

Function xzip

opensca/walk/zip.go:17–83  ·  view source on GitHub ↗
(ctx context.Context, filter ExtractFileFilter, input, output string)

Source from the content-addressed store, hash-verified

15)
16
17func xzip(ctx context.Context, filter ExtractFileFilter, input, output string) bool {
18
19 if !checkFileHead(input, M_ZIP) {
20 return false
21 }
22
23 rf, err := zip.OpenReader(input)
24 if err != nil {
25 logs.Warn(err)
26 return false
27 }
28 defer rf.Close()
29
30 for _, f := range rf.File {
31
32 select {
33 case <-ctx.Done():
34 return false
35 default:
36 }
37
38 if f.FileInfo().IsDir() {
39 continue
40 }
41
42 entryName := f.Name
43
44 if f.Flags == 0 {
45 gbk := mahonia.NewDecoder("gbk").ConvertString(f.Name)
46 _, cdata, _ := mahonia.NewDecoder("utf-8").Translate([]byte(gbk), true)
47 entryName = string(cdata)
48 }
49
50 fp, err := resolveExtractPath(output, entryName)
51 if err != nil {
52 logs.Warn(err)
53 continue
54 }
55
56 if filter != nil && !filter(fp) {
57 continue
58 }
59
60 fr, err := f.Open()
61 if err != nil {
62 logs.Warn(err)
63 continue
64 }
65
66 os.MkdirAll(filepath.Dir(fp), 0777)
67 fw, err := os.Create(fp)
68 if err != nil {
69 logs.Warn(err)
70 fr.Close() // 提前退出时手动关闭
71 continue
72 }
73
74 _, err = io.Copy(fw, fr)

Callers 2

decompressFunction · 0.85
xjarFunction · 0.85

Calls 6

WarnFunction · 0.92
checkFileHeadFunction · 0.85
resolveExtractPathFunction · 0.85
OpenReaderMethod · 0.80
CloseMethod · 0.45
CopyMethod · 0.45

Tested by

no test coverage detected