diff options
author | Martin Storsjö <martin@martin.st> | 2010-06-08 11:18:22 +0000 |
---|---|---|
committer | Martin Storsjö <martin@martin.st> | 2010-06-08 11:18:22 +0000 |
commit | 701ea516eeafc38b5077eca2ce5e994f306e5165 (patch) | |
tree | 013a19b029b5481d3866bd24d19d7030ce7d0527 /libavformat/http.c | |
parent | 4ceb8b3460d58617aff5deb9c73c43d04055542b (diff) | |
download | ffmpeg-701ea516eeafc38b5077eca2ce5e994f306e5165.tar.gz |
Fix handling of errors in the http protocol
If http_connect fails, we've already stored the new connection handle in s->hd,
so clear it so http_close won't double-free it.
10l to me for not spotting it during review
Originally committed as revision 23529 to svn://svn.ffmpeg.org/ffmpeg/trunk
Diffstat (limited to 'libavformat/http.c')
-rw-r--r-- | libavformat/http.c | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/libavformat/http.c b/libavformat/http.c index 09acee69ae..815ffffded 100644 --- a/libavformat/http.c +++ b/libavformat/http.c @@ -131,6 +131,7 @@ static int http_open_cnx(URLContext *h) fail: if (hd) url_close(hd); + s->hd = NULL; return AVERROR(EIO); } @@ -149,6 +150,7 @@ static int http_open(URLContext *h, const char *uri, int flags) s->chunksize = -1; s->off = 0; s->init = 0; + s->hd = NULL; *s->headers = '\0'; memset(&s->auth_state, 0, sizeof(s->auth_state)); av_strlcpy(s->location, uri, URL_SIZE); @@ -452,7 +454,8 @@ static int http_close(URLContext *h) ret = ret > 0 ? 0 : ret; } - url_close(s->hd); + if (s->hd) + url_close(s->hd); av_free(s); return ret; } |