summaryrefslogtreecommitdiff
path: root/libavformat/http.c
diff options
context:
space:
mode:
Diffstat (limited to 'libavformat/http.c')
-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) {