Improve compression format recognition

Some comressed archives can pass the checksum test, which makes tar
treat them as uncompressed archives.

* src/buffer.c (check_compressed_archive): Test the checksum only
if the block we read looks like a valid tar header (i.e. has
a magic string).
This commit is contained in:
Sergey Poznyakoff
2015-02-19 17:00:58 +02:00
parent 9c2b57232e
commit 1847ec67ce

View File

@@ -391,7 +391,10 @@ check_compressed_archive (bool *pshort)
/* Restore global values */
read_full_records = sfr;
if (tar_checksum (record_start, true) == HEADER_SUCCESS)
if ((strcmp (record_start->header.magic, TMAGIC) == 0 ||
strcmp (record_start->buffer + offsetof (struct posix_header, magic),
OLDGNU_MAGIC) == 0) &&
tar_checksum (record_start, true) == HEADER_SUCCESS)
/* Probably a valid header */
return ct_tar;