On Sat, Aug 17, 2019 at 12:24 PM René Scharfe <l.s.r@xxxxxx> wrote: > A pax extended header records starts with a decimal number. Its value s/records/record/ > is the length of the whole record, including its own length. > > The calculation of that number if strbuf_append_ext_header() is off by s/if/in/ > one in case the length of the rest is close to a higher order of > magnitude. This affects paths and link targets a bit shorter than 1000, > 10000, 100000 etc. characters -- paths with a length of up to 100 fit > into the tar header and don't need a pax extended header. > > The mistake has been present since the function was added by ae64bbc18c > ("tar-tree: Introduce write_entry()", 2006-03-25). > > Account for digits added to len during the loop and keep incrementing > until we have enough space for len and the rest. The crucial change is > to check against the current value of len before each iteration, instead > of against its value before the loop. > > Signed-off-by: René Scharfe <l.s.r@xxxxxx>