summaryrefslogtreecommitdiff
path: root/libavformat/http.c
diff options
context:
space:
mode:
authorMartin Storsjö <martin@martin.st>2012-06-17 21:19:41 +0300
committerMartin Storsjö <martin@martin.st>2012-06-17 22:56:56 +0300
commit35127bf156df09ebf43f1ad7ea236653f7ba7707 (patch)
treed513915181b3bae041de5c6ca5f2a749507cb7e0 /libavformat/http.c
parenteb564b23a3768edea1d8c2d20439e6a4fdea2747 (diff)
http: Properly handle chunked transfer-encoding for replies to post data
Signed-off-by: Martin Storsjö <martin@martin.st>
Diffstat (limited to 'libavformat/http.c')
-rw-r--r--libavformat/http.c15
1 files changed, 6 insertions, 9 deletions
diff --git a/libavformat/http.c b/libavformat/http.c
index 2b5f2cc53b..a4941937dd 100644
--- a/libavformat/http.c
+++ b/libavformat/http.c
@@ -353,6 +353,8 @@ static int http_read_header(URLContext *h, int *new_location)
char line[1024];
int err = 0;
+ s->chunksize = -1;
+
for (;;) {
if ((err = http_get_line(s, line, sizeof(line))) < 0)
return err;
@@ -470,7 +472,6 @@ static int http_connect(URLContext *h, const char *path, const char *local_path,
s->http_code = 200;
return 0;
}
- s->chunksize = -1;
/* wait for header */
err = http_read_header(h, new_location);
@@ -513,14 +514,10 @@ static int http_read(URLContext *h, uint8_t *buf, int size)
if (!s->hd)
return AVERROR_EOF;
- if (s->end_chunked_post) {
- if (!s->end_header) {
- err = http_read_header(h, &new_location);
- if (err < 0)
- return err;
- }
-
- return http_buf_read(h, buf, size);
+ if (s->end_chunked_post && !s->end_header) {
+ err = http_read_header(h, &new_location);
+ if (err < 0)
+ return err;
}
if (s->chunksize >= 0) {