tarFilterer: always flush after writing

Always call the nested TarWriter's Flush() method after writing file
contents.

Signed-off-by: Nalin Dahyabhai <nalin@redhat.com>
This commit is contained in:
Nalin Dahyabhai 2025-06-17 11:34:51 -04:00
parent fce45b77d0
commit 7d5f1e1ca9
1 changed files with 14 additions and 4 deletions

View File

@ -61,7 +61,14 @@ type tarFilterer struct {
} }
func (t *tarFilterer) Write(p []byte) (int, error) { func (t *tarFilterer) Write(p []byte) (int, error) {
return t.pipeWriter.Write(p) n, err := t.pipeWriter.Write(p)
if err != nil {
t.closedLock.Lock()
closed := t.closed
t.closedLock.Unlock()
err = fmt.Errorf("writing to tar filter pipe (closed=%v,err=%v): %w", closed, t.err, err)
}
return n, err
} }
func (t *tarFilterer) Close() error { func (t *tarFilterer) Close() error {
@ -108,9 +115,8 @@ func newTarFilterer(writeCloser io.WriteCloser, filter func(hdr *tar.Header) (sk
skip, replaceContents, replacementContents = filter(hdr) skip, replaceContents, replacementContents = filter(hdr)
} }
if !skip { if !skip {
err = tarWriter.WriteHeader(hdr) if err = tarWriter.WriteHeader(hdr); err != nil {
if err != nil { err = fmt.Errorf("writing tar header for %q: %w", hdr.Name, err)
err = fmt.Errorf("filtering tar header for %q: %w", hdr.Name, err)
break break
} }
if hdr.Size != 0 { if hdr.Size != 0 {
@ -130,6 +136,10 @@ func newTarFilterer(writeCloser io.WriteCloser, filter func(hdr *tar.Header) (sk
break break
} }
} }
if err = tarWriter.Flush(); err != nil {
err = fmt.Errorf("flushing tar item padding for %q: %w", hdr.Name, err)
break
}
} }
hdr, err = tarReader.Next() hdr, err = tarReader.Next()
} }