(file *zip.File, tarWriter *tar.Writer)
| 139 | } |
| 140 | |
| 141 | func 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. |
| 180 | func CreateZipFromTar(tarReader *tar.Reader, maxSize int64) ([]byte, error) { |
no test coverage detected