diff options
author | Lukasz Marek | 2014-02-28 00:36:06 +0100 |
---|---|---|
committer | Lukasz Marek | 2014-03-06 00:32:20 +0100 |
commit | 4ba6a534dc94bd4ff44503de9c7985a456cfe503 (patch) | |
tree | 297cc154835d3cf2baa7eb9a2f119a9b46ad3f3b /libavformat/http.c | |
parent | f495fbe76a2665cdea092999ca2dbb603d13280c (diff) |
lavf/http: return error on seeking to negative postion
Signed-off-by: Lukasz Marek <lukasz.m.luki@gmail.com>
Diffstat (limited to 'libavformat/http.c')
-rw-r--r-- | libavformat/http.c | 11 |
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) { |