mirror of
https://github.com/freebsd/freebsd-src.git
synced 2024-11-28 09:02:44 +00:00
Check that lseek(2) succeeds and puts us where we expect. [1]
While we're here, fix a long-standing bug in the handling of write(2) errors: The API changed from "return # of bytes written" to "return status code" almost 4 years ago, so instead of returning (-1) we need to return ARCHIVE_FATAL. Found by: Coverity Prevent [1]
This commit is contained in:
parent
ca42a8e225
commit
b011a14a0a
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=179235
@ -64,8 +64,12 @@ archive_read_data_into_fd(struct archive *a, int fd)
|
||||
ARCHIVE_OK) {
|
||||
const char *p = buff;
|
||||
if (offset > output_offset) {
|
||||
lseek(fd, offset - output_offset, SEEK_CUR);
|
||||
output_offset = offset;
|
||||
output_offset = lseek(fd,
|
||||
offset - output_offset, SEEK_CUR);
|
||||
if (output_offset != offset) {
|
||||
archive_set_error(a, errno, "Seek error");
|
||||
return (ARCHIVE_FATAL);
|
||||
}
|
||||
}
|
||||
while (size > 0) {
|
||||
bytes_to_write = size;
|
||||
@ -74,7 +78,7 @@ archive_read_data_into_fd(struct archive *a, int fd)
|
||||
bytes_written = write(fd, p, bytes_to_write);
|
||||
if (bytes_written < 0) {
|
||||
archive_set_error(a, errno, "Write error");
|
||||
return (-1);
|
||||
return (ARCHIVE_FATAL);
|
||||
}
|
||||
output_offset += bytes_written;
|
||||
total_written += bytes_written;
|
||||
|
Loading…
Reference in New Issue
Block a user