summaryrefslogtreecommitdiff
path: root/libavformat
diff options
context:
space:
mode:
authorLukasz Marek <lukasz.m.luki@gmail.com>2014-02-28 00:36:06 +0100
committerLukasz Marek <lukasz.m.luki@gmail.com>2014-03-06 00:32:20 +0100
commit4ba6a534dc94bd4ff44503de9c7985a456cfe503 (patch)
tree297cc154835d3cf2baa7eb9a2f119a9b46ad3f3b /libavformat
parentf495fbe76a2665cdea092999ca2dbb603d13280c (diff)
lavf/http: return error on seeking to negative postion
Signed-off-by: Lukasz Marek <lukasz.m.luki@gmail.com>
Diffstat (limited to 'libavformat')
-rw-r--r--libavformat/http.c11
1 files changed, 7 insertions, 4 deletions
diff --git a/libavformat/http.c b/libavformat/http.c
index 69c4d6d7a0..08832bde59 100644
--- a/libavformat/http.c
+++ b/libavformat/http.c
@@ -955,16 +955,19 @@ static int64_t http_seek(URLContext *h, int64_t off, int whence)
else if ((s->filesize == -1 && whence == SEEK_END) || h->is_streamed)
return -1;
- /* we save the old context in case the seek fails */
- old_buf_size = s->buf_end - s->buf_ptr;
- memcpy(old_buf, s->buf_ptr, old_buf_size);
- s->hd = NULL;
if (whence == SEEK_CUR)
off += s->off;
else if (whence == SEEK_END)
off += s->filesize;
+ if (off < 0)
+ return AVERROR(EINVAL);
s->off = off;
+ /* we save the old context in case the seek fails */
+ old_buf_size = s->buf_end - s->buf_ptr;
+ memcpy(old_buf, s->buf_ptr, old_buf_size);
+ s->hd = NULL;
+
/* if it fails, continue on old connection */
av_dict_copy(&options, s->chained_options, 0);
if (http_open_cnx(h, &options) < 0) {