X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=src%2Fextract.c;h=e859c169dfdfc0e51d98acbdd2c67dcd297225a7;hb=2eaf29f3fb63f1214b260f2e72d22447a5ae419b;hp=e761da5c884fbd8bfd90382f226092ad25c775d3;hpb=5e0e027651e89233d4f3c4ca089db72468e31173;p=chaz%2Ftar 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);