From: Paul Eggert Date: Wed, 18 Aug 1999 07:52:26 +0000 (+0000) Subject: (extract_sparse_file, extract_archive): Don't assume find_next_block yields nonnull. X-Git-Url: https://git.brokenzipper.com/gitweb?a=commitdiff_plain;h=72290b64a6433a3c88ecb7b3044c3047beffeadc;p=chaz%2Ftar (extract_sparse_file, extract_archive): Don't assume find_next_block yields nonnull. (extract_archive): Fix sparse array bug: we did not find end of array correctly. --- diff --git a/src/extract.c b/src/extract.c index e761da5..e859c16 100644 --- a/src/extract.c +++ b/src/extract.c @@ -367,6 +367,11 @@ extract_sparse_file (int fd, off_t *sizeleft, off_t totalsize, char *name) *sizeleft -= count; set_next_block_after (data_block); data_block = find_next_block (); + if (! data_block) + { + ERROR ((0, 0, _("Unexpected EOF on archive file"))); + return; + } } count = full_write (fd, data_block->buffer, written); @@ -507,6 +512,11 @@ extract_archive (void) while (1) { exhdr = find_next_block (); + if (! exhdr) + { + ERROR ((0, 0, _("Unexpected EOF on archive file"))); + return; + } for (counter = 0; counter < SPARSES_IN_SPARSE_HEADER; counter++) { if (counter + ind > sp_array_size - 1) @@ -519,9 +529,7 @@ extract_archive (void) xrealloc (sparsearray, sp_array_size * (sizeof (struct sp_array))); } - /* Compare to 0, or use !(int)..., for Pyramid's dumb - compiler. */ - if (exhdr->sparse_header.sp[counter].numbytes == 0) + if (exhdr->sparse_header.sp[counter].numbytes[0] == 0) break; sparsearray[counter + ind].offset = OFF_FROM_CHARS (exhdr->sparse_header.sp[counter].offset);