fix(installer): prevent file descriptor exhaustion during OCI plugin extraction

Closes #32344

Signed-off-by: anushkagupta200615-jpg <anushkagupta200615@gmail.com>
pull/32347/head
anushkagupta200615-jpg 3 months ago
parent 68977ec0b5
commit 621ebfbea9

@ -209,6 +209,26 @@ func extractTarGz(r io.Reader, targetDir string) error {
return extractTar(gzr, targetDir) return extractTar(gzr, targetDir)
} }
// extractFile creates a single file from the tar archive
func extractFile(path string, mode int64, src io.Reader) error {
dir := filepath.Dir(path)
if err := os.MkdirAll(dir, 0o755); err != nil {
return err
}
outFile, err := os.OpenFile(path, os.O_CREATE|os.O_RDWR, os.FileMode(mode))
if err != nil {
return err
}
defer outFile.Close()
if _, err := io.Copy(outFile, src); err != nil {
return err
}
return nil
}
// extractTar extracts a tar archive to a directory // extractTar extracts a tar archive to a directory
func extractTar(r io.Reader, targetDir string) error { func extractTar(r io.Reader, targetDir string) error {
tarReader := tar.NewReader(r) tarReader := tar.NewReader(r)
@ -233,17 +253,7 @@ func extractTar(r io.Reader, targetDir string) error {
return err return err
} }
case tar.TypeReg: case tar.TypeReg:
dir := filepath.Dir(path) if err := extractFile(path, header.Mode, tarReader); err != nil {
if err := os.MkdirAll(dir, 0o755); err != nil {
return err
}
outFile, err := os.OpenFile(path, os.O_CREATE|os.O_RDWR, os.FileMode(header.Mode))
if err != nil {
return err
}
defer outFile.Close()
if _, err := io.Copy(outFile, tarReader); err != nil {
return err return err
} }
case tar.TypeXGlobalHeader, tar.TypeXHeader: case tar.TypeXGlobalHeader, tar.TypeXHeader:

Loading…
Cancel
Save