On Fri, Feb 3, 2017 at 9:35 AM, willy <[email protected]> wrote: > Willy Gfn wrote: >> Hello, >> >> The attached patch makes tar read again from a pipe in case less bytes >> are read than expected. >> This prevent a bug where it fails to extract files correctly because >> not enough bytes are read from, eg, a pipe hooked to a decompression >> program. > > Just realised there is a bug in my patch. We should only keep reading > if read() returns more than 0 bytes, otherwise the functions returns. > > Updated patch attached.
If there is EINTR, s will be decremented by 1 incorrectly since r will be -1. I think you need to move s += r to after the if (r < 0). But, I don't think you could even get EINTR since tar doesn't set any signal handlers. Maybe there is some case I don't know about though.
