MCPcopy Index your code
hub / github.com/coder/coder / processFileInZipArchive

Function processFileInZipArchive

archive/archive.go:141–177  ·  view source on GitHub ↗
(file *zip.File, tarWriter *tar.Writer)

Source from the content-addressed store, hash-verified

139}
140
141func processFileInZipArchive(file *zip.File, tarWriter *tar.Writer) error {
142 fileReader, err := file.Open()
143 if err != nil {
144 return err
145 }
146 defer fileReader.Close()
147
148 size := file.FileInfo().Size()
149 if size < 0 {
150 return ErrArchiveTooLarge
151 }
152
153 err = tarWriter.WriteHeader(&tar.Header{
154 Name: file.Name,
155 Size: size,
156 Mode: int64(file.Mode()),
157 ModTime: file.Modified,
158 // Note: Zip archives do not store ownership information.
159 Uid: 1000,
160 Gid: 1000,
161 })
162 if err != nil {
163 return err
164 }
165
166 _, err = io.CopyN(tarWriter, fileReader, size)
167 switch {
168 case errors.Is(err, io.EOF), errors.Is(err, io.ErrUnexpectedEOF):
169 return ErrInvalidZipContent
170 case errors.Is(err, zip.ErrChecksum), errors.Is(err, zip.ErrFormat):
171 return ErrInvalidZipContent
172 case err != nil:
173 return err
174 default:
175 return nil
176 }
177}
178
179// CreateZipFromTar converts the given tarReader to a zip archive.
180func CreateZipFromTar(tarReader *tar.Reader, maxSize int64) ([]byte, error) {

Callers 1

writeTarArchiveFunction · 0.85

Calls 5

SizeMethod · 0.80
CloseMethod · 0.65
OpenMethod · 0.45
WriteHeaderMethod · 0.45
IsMethod · 0.45

Tested by

no test coverage detected