in pkg/3p/archiver/tar.go [221:244]
func untarFile(tr *tar.Reader, header *tar.Header, destination string) error {
err := sanitizeExtractPath(header.Name, destination)
if err != nil {
return err
}
destpath := filepath.Join(destination, header.Name)
switch header.Typeflag {
case tar.TypeDir:
return mkdir(destpath)
case tar.TypeReg, tar.TypeRegA, tar.TypeChar, tar.TypeBlock, tar.TypeFifo:
return writeNewFile(destpath, tr, header.FileInfo().Mode())
case tar.TypeSymlink:
return writeNewSymbolicLink(destpath, header.Linkname)
case tar.TypeLink:
return writeNewHardLink(destpath, filepath.Join(destination, header.Linkname))
case tar.TypeXGlobalHeader:
// ignore the pax global header from git generated tarballs
return nil
default:
return fmt.Errorf("%s: unknown type flag: %c", header.Name, header.Typeflag)
}
}