summaryrefslogtreecommitdiff
path: root/libarchive/archive_read.c
diff options
context:
space:
mode:
authorTim Kientzle <kientzle@acm.org>2013-12-26 13:59:00 -0800
committerTim Kientzle <kientzle@acm.org>2013-12-26 13:59:00 -0800
commitde9ee708b8e100858960749b153c3cecf1910eb4 (patch)
tree6d40c3e8b302e99b3a9c0d36bc0dfb0c507f579e /libarchive/archive_read.c
parent8b108555200f3d0ad21f065931e4147a88b45d8f (diff)
downloadlibarchive-de9ee708b8e100858960749b153c3cecf1910eb4.tar.gz
Out-of-range seeks should fail, not truncate the seek.
Diffstat (limited to 'libarchive/archive_read.c')
-rw-r--r--libarchive/archive_read.c7
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;