diff options
author | David Oberhollenzer <david.oberhollenzer@sigma-star.at> | 2019-07-24 13:36:50 +0200 |
---|---|---|
committer | David Oberhollenzer <david.oberhollenzer@sigma-star.at> | 2019-07-24 18:10:34 +0200 |
commit | 4fdfd1f62a9d50298b0bb71e8bea04174af4a3ab (patch) | |
tree | d511b488ce77ef2b0b84b26ead69a1d01375491c /tests/tar_pax.c | |
parent | 30fbd496a1793b4374873144432f9b7a996a689d (diff) |
Fix processing of tar mtime on 32 bit systems
struct stat uses time_t to store time values. On some 32 bit systems,
this may be a 32 bit integer.
This patch adds a broken-out 64 bit time value to tar_header_decoded_t
and makes sure to clamp the value to +/- (2^32 - 1) if required when
writing it back to a struct stat.
Reported-by: Matt Turner <mattst88@gmail.com>
Signed-off-by: David Oberhollenzer <david.oberhollenzer@sigma-star.at>
Diffstat (limited to 'tests/tar_pax.c')
-rw-r--r-- | tests/tar_pax.c | 12 |
1 files changed, 11 insertions, 1 deletions
diff --git a/tests/tar_pax.c b/tests/tar_pax.c index c383427..9ca12ff 100644 --- a/tests/tar_pax.c +++ b/tests/tar_pax.c @@ -48,6 +48,7 @@ int main(void) assert(hdr.sb.st_gid == 01750); assert(hdr.sb.st_size == 5); assert(hdr.sb.st_mtime == 1542905892); + assert(hdr.mtime == 1542905892); assert(strcmp(hdr.name, "input.txt") == 0); assert(!hdr.unknown_record); assert(read_data("data0", fd, buffer, 5) == 0); @@ -63,6 +64,7 @@ int main(void) assert(hdr.sb.st_gid == 01750); assert(hdr.sb.st_size == 8589934592); assert(hdr.sb.st_mtime == 1542959190); + assert(hdr.mtime == 1542959190); assert(strcmp(hdr.name, "big-file.bin") == 0); assert(!hdr.unknown_record); clear_header(&hdr); @@ -75,6 +77,7 @@ int main(void) assert(hdr.sb.st_gid == 2147483648); assert(hdr.sb.st_size == 5); assert(hdr.sb.st_mtime == 013376036700); + assert(hdr.mtime == 013376036700); assert(strcmp(hdr.name, "input.txt") == 0); assert(!hdr.unknown_record); assert(read_data("data1", fd, buffer, 5) == 0); @@ -89,7 +92,12 @@ int main(void) assert(hdr.sb.st_uid == 01750); assert(hdr.sb.st_gid == 01750); assert(hdr.sb.st_size == 5); - assert(hdr.sb.st_mtime == 8589934592); +#if SIZEOF_TIME_T < 8 + assert(hdr.sb.st_mtime == INT32_MAX); +#else + assert(hdr.sb.st_mtime == 8589934592L); +#endif + assert(hdr.mtime == 8589934592L); assert(strcmp(hdr.name, "input.txt") == 0); assert(!hdr.unknown_record); assert(read_data("data2", fd, buffer, 5) == 0); @@ -105,6 +113,7 @@ int main(void) assert(hdr.sb.st_gid == 01750); assert(hdr.sb.st_size == 5); assert(hdr.sb.st_mtime == -315622800); + assert(hdr.mtime == -315622800); assert(strcmp(hdr.name, "input.txt") == 0); assert(!hdr.unknown_record); assert(read_data("data3", fd, buffer, 5) == 0); @@ -120,6 +129,7 @@ int main(void) assert(hdr.sb.st_gid == 01750); assert(hdr.sb.st_size == 5); assert(hdr.sb.st_mtime == 1542909670); + assert(hdr.mtime == 1542909670); assert(strcmp(hdr.name, filename) == 0); assert(!hdr.unknown_record); assert(read_data("data4", fd, buffer, 5) == 0); |