aboutsummaryrefslogtreecommitdiffstats
path: root/libavformat/http.c
diff options
context:
space:
mode:
authorMartin Storsjö <martin@martin.st>2010-06-08 11:18:22 +0000
committerMartin Storsjö <martin@martin.st>2010-06-08 11:18:22 +0000
commit701ea516eeafc38b5077eca2ce5e994f306e5165 (patch)
tree013a19b029b5481d3866bd24d19d7030ce7d0527 /libavformat/http.c
parent4ceb8b3460d58617aff5deb9c73c43d04055542b (diff)
downloadffmpeg-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.c5
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;
}