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 }