(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.
This commit is contained in:
Paul Eggert
1999-08-18 07:52:26 +00:00
parent 34183f8d77
commit 72290b64a6

View File

@@ -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);