# HG changeset patch # User frosch # Date 1215874183 0 # Node ID 6c703d2da75b7357c17283e99dda783d373dcab9 # Parent c40cabfe69a5e231ade823e6e46085cceee44b70 (svn r13693) -Fix (r11106, r11117): Do not rely on .tar files always ending with a block of zeros. diff -r c40cabfe69a5 -r 6c703d2da75b src/fileio.cpp --- a/src/fileio.cpp Sat Jul 12 14:03:36 2008 +0000 +++ b/src/fileio.cpp Sat Jul 12 14:49:43 2008 +0000 @@ -487,8 +487,10 @@ char empty[512]; memset(&empty[0], 0, sizeof(empty)); - while (!feof(f)) { - pos += fread(&th, 1, 512, f); + for (;;) { // Note: feof() always returns 'false' after 'fseek()'. Cool, isn't it? + size_t num_bytes_read = fread(&th, 1, 512, f); + if (num_bytes_read != 512) break; + pos += num_bytes_read; /* Check if we have the new tar-format (ustar) or the old one (a lot of zeros after 'link' field) */ if (strncmp(th.magic, "ustar", 5) != 0 && memcmp(&th.magic, &empty[0], 512 - offsetof(TarHeader, magic)) != 0) {