summaryrefslogtreecommitdiff
path: root/libavformat
diff options
context:
space:
mode:
authorMichael Niedermayer <michaelni@gmx.at>2014-03-06 02:04:15 +0100
committerMichael Niedermayer <michaelni@gmx.at>2014-03-06 02:04:18 +0100
commitc832bf0c38a36698684971eca5f779d115b01976 (patch)
tree7f1d3016035c77fbcd7b71ca7d22697ab4d6d6ba /libavformat
parent636273d3d4a8c42f51832e8bf83e566e875916bf (diff)
parent2475fdbd047d8956b03f1bfb1e3f896985fd8c7f (diff)
Merge remote-tracking branch 'lukaszmluki/master'
* lukaszmluki/master: lavd/avdevice: always free detected devices on error lavf/http: return error from seek on invalid whence lavf/http: return error on seeking to negative postion lavf/avio: fix ffurl_alloc error checks Merged-by: Michael Niedermayer <michaelni@gmx.at>
Diffstat (limited to 'libavformat')
-rw-r--r--libavformat/avio.c4
-rw-r--r--libavformat/http.c13
2 files changed, 11 insertions, 6 deletions
diff --git a/libavformat/avio.c b/libavformat/avio.c
index a76f9db3b8..e366dfa388 100644
--- a/libavformat/avio.c
+++ b/libavformat/avio.c
@@ -270,7 +270,7 @@ int ffurl_open(URLContext **puc, const char *filename, int flags,
const AVIOInterruptCB *int_cb, AVDictionary **options)
{
int ret = ffurl_alloc(puc, filename, flags, int_cb);
- if (ret)
+ if (ret < 0)
return ret;
if (options && (*puc)->prot->priv_data_class &&
(ret = av_opt_set_dict((*puc)->priv_data, options)) < 0)
@@ -399,7 +399,7 @@ int avio_check(const char *url, int flags)
{
URLContext *h;
int ret = ffurl_alloc(&h, url, flags, NULL);
- if (ret)
+ if (ret < 0)
return ret;
if (h->prot->url_check) {
diff --git a/libavformat/http.c b/libavformat/http.c
index 7a0ba6cedd..f693c4d0c6 100644
--- a/libavformat/http.c
+++ b/libavformat/http.c
@@ -979,16 +979,21 @@ 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;
+ else if (whence != SEEK_SET)
+ return AVERROR(EINVAL);
+ 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) {