go.mondoo.com/cnquery@v0.0.0-20231005093811-59568235f6ea/providers/os/fsutil/read_tarfile.go (about)

     1  // Copyright (c) Mondoo, Inc.
     2  // SPDX-License-Identifier: BUSL-1.1
     3  
     4  package fsutil
     5  
     6  import (
     7  	"archive/tar"
     8  	"bufio"
     9  	"bytes"
    10  	"io"
    11  )
    12  
    13  // TODO: check size of file to ensure we do not crash the process
    14  func ReadFileFromTarStream(r io.Reader) ([]byte, error) {
    15  	var fileBuffer bytes.Buffer
    16  	fileWriter := bufio.NewWriter(&fileBuffer)
    17  
    18  	// read stream tar, extract on the fly and put it on stdout
    19  	tr := tar.NewReader(r)
    20  	for {
    21  		_, err := tr.Next()
    22  		if err == io.EOF {
    23  			break
    24  		}
    25  		if err != nil {
    26  			return nil, err
    27  		}
    28  
    29  		if _, err := io.Copy(fileWriter, tr); err != nil {
    30  			return nil, err
    31  		}
    32  	}
    33  	fileWriter.Flush()
    34  
    35  	return fileBuffer.Bytes(), nil
    36  }