Browse code

Close readclosers returned by DecompressStream

Signed-off-by: Joe Ferguson <joe@infosiftr.com>

Joe Ferguson authored on 2017/07/22 09:47:15
Showing 3 changed files
... ...
@@ -127,6 +127,7 @@ func IsArchivePath(path string) bool {
127 127
 	if err != nil {
128 128
 		return false
129 129
 	}
130
+	defer rdr.Close()
130 131
 	r := tar.NewReader(rdr)
131 132
 	_, err = r.Next()
132 133
 	return err == nil
... ...
@@ -247,10 +247,12 @@ func applyLayerHandler(dest string, layer io.Reader, options *TarOptions, decomp
247 247
 	defer system.Umask(oldmask) // ignore err, ErrNotSupportedPlatform
248 248
 
249 249
 	if decompress {
250
-		layer, err = DecompressStream(layer)
250
+		decompLayer, err := DecompressStream(layer)
251 251
 		if err != nil {
252 252
 			return 0, err
253 253
 		}
254
+		defer decompLayer.Close()
255
+		layer = decompLayer
254 256
 	}
255 257
 	return UnpackLayer(dest, layer, options)
256 258
 }
... ...
@@ -145,6 +145,7 @@ func (dm *downloadManager) Download(ctx context.Context, initialRootFS image.Roo
145 145
 		if err != nil {
146 146
 			return initialRootFS, nil, err
147 147
 		}
148
+		defer inflatedLayerData.Close()
148 149
 		digester := digest.Canonical.Digester()
149 150
 		if _, err := chrootarchive.ApplyLayer(dm.tmpDir, io.TeeReader(inflatedLayerData, digester.Hash())); err != nil {
150 151
 			return initialRootFS, nil, err