Fix bug when handling debian packages.
If we read the contents of compressed files within the ar archive, e.g. control.tar.gz, then file position gets all out of whack, so it has to be reset before reading thenext header.
This commit is contained in:
parent
6a9ca985b8
commit
91e464632b
@ -45,7 +45,7 @@ extern char get_header_ar(archive_handle_t *archive_handle)
|
|||||||
if (read(archive_handle->src_fd, ar.raw, 60) != 60) {
|
if (read(archive_handle->src_fd, ar.raw, 60) != 60) {
|
||||||
/* End Of File */
|
/* End Of File */
|
||||||
return(EXIT_FAILURE);
|
return(EXIT_FAILURE);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Some ar entries have a trailing '\n' after the previous data entry */
|
/* Some ar entries have a trailing '\n' after the previous data entry */
|
||||||
if (ar.raw[0] == '\n') {
|
if (ar.raw[0] == '\n') {
|
||||||
@ -55,7 +55,7 @@ extern char get_header_ar(archive_handle_t *archive_handle)
|
|||||||
archive_handle->offset++;
|
archive_handle->offset++;
|
||||||
}
|
}
|
||||||
archive_handle->offset += 60;
|
archive_handle->offset += 60;
|
||||||
|
|
||||||
/* align the headers based on the header magic */
|
/* align the headers based on the header magic */
|
||||||
if ((ar.formated.magic[0] != '`') || (ar.formated.magic[1] != '\n')) {
|
if ((ar.formated.magic[0] != '`') || (ar.formated.magic[1] != '\n')) {
|
||||||
bb_error_msg_and_die("Invalid ar header");
|
bb_error_msg_and_die("Invalid ar header");
|
||||||
@ -115,7 +115,9 @@ extern char get_header_ar(archive_handle_t *archive_handle)
|
|||||||
data_skip(archive_handle);
|
data_skip(archive_handle);
|
||||||
}
|
}
|
||||||
|
|
||||||
archive_handle->offset += typed->size + 1;
|
archive_handle->offset += typed->size;
|
||||||
|
/* Set the file pointer to the correct spot, we may have been reading a compressed file */
|
||||||
|
lseek(archive_handle->src_fd, archive_handle->offset, SEEK_SET);
|
||||||
|
|
||||||
return(EXIT_SUCCESS);
|
return(EXIT_SUCCESS);
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user