diff options
author | Tim Kientzle <kientzle@acm.org> | 2013-12-26 13:59:00 -0800 |
---|---|---|
committer | Tim Kientzle <kientzle@acm.org> | 2013-12-26 13:59:00 -0800 |
commit | de9ee708b8e100858960749b153c3cecf1910eb4 (patch) | |
tree | 6d40c3e8b302e99b3a9c0d36bc0dfb0c507f579e /libarchive | |
parent | 8b108555200f3d0ad21f065931e4147a88b45d8f (diff) | |
download | libarchive-de9ee708b8e100858960749b153c3cecf1910eb4.tar.gz |
Out-of-range seeks should fail, not truncate the seek.
Diffstat (limited to 'libarchive')
-rw-r--r-- | libarchive/archive_read.c | 7 |
1 files changed, 3 insertions, 4 deletions
diff --git a/libarchive/archive_read.c b/libarchive/archive_read.c index cc05588b..c9f28b86 100644 --- a/libarchive/archive_read.c +++ b/libarchive/archive_read.c @@ -1614,10 +1614,9 @@ __archive_read_filter_seek(struct archive_read_filter *filter, int64_t offset, client->dataset[++cursor].begin_position = r; } offset -= client->dataset[cursor].begin_position; - if (offset < 0) - offset = 0; - else if (offset > client->dataset[cursor].total_size - 1) - offset = client->dataset[cursor].total_size - 1; + if (offset < 0 + || offset > client->dataset[cursor].total_size) + return ARCHIVE_FATAL; if ((r = client_seek_proxy(filter, offset, SEEK_SET)) < 0) return r; break; |