From 6c643e070584ba7af251d3907e277d2170537b1f Mon Sep 17 00:00:00 2001 From: John Brooks Date: Wed, 9 Nov 2011 20:14:19 -0700 Subject: avc: fix memory errors when encoding invalid h264 codecdata Signed-off-by: Ronald S. Bultje --- libavformat/avc.c | 29 ++++++++++++++++++----------- 1 file changed, 18 insertions(+), 11 deletions(-) (limited to 'libavformat') diff --git a/libavformat/avc.c b/libavformat/avc.c index 70a05ec5bc..b0c511e7b5 100644 --- a/libavformat/avc.c +++ b/libavformat/avc.c @@ -75,8 +75,11 @@ int ff_avc_parse_nal_units(AVIOContext *pb, const uint8_t *buf_in, int size) size = 0; nal_start = ff_avc_find_startcode(p, end); - while (nal_start < end) { - while(!*(nal_start++)); + for (;;) { + while (nal_start < end && !*(nal_start++)); + if (nal_start == end) + break; + nal_end = ff_avc_find_startcode(nal_start, end); avio_wb32(pb, nal_end - nal_start); avio_write(pb, nal_start, nal_end - nal_start); @@ -117,22 +120,26 @@ int ff_isom_write_avcc(AVIOContext *pb, const uint8_t *data, int len) end = buf + len; /* look for sps and pps */ - while (buf < end) { - unsigned int size; + while (end - buf > 4) { + uint32_t size; uint8_t nal_type; - size = AV_RB32(buf); - nal_type = buf[4] & 0x1f; + size = FFMIN(AV_RB32(buf), end - buf - 4); + buf += 4; + nal_type = buf[0] & 0x1f; + if (nal_type == 7) { /* SPS */ - sps = buf + 4; + sps = buf; sps_size = size; } else if (nal_type == 8) { /* PPS */ - pps = buf + 4; + pps = buf; pps_size = size; } - buf += size + 4; + + buf += size; } - assert(sps); - assert(pps); + + if (!sps || !pps || sps_size < 4 || sps_size > UINT16_MAX || pps_size > UINT16_MAX) + return AVERROR_INVALIDDATA; avio_w8(pb, 1); /* version */ avio_w8(pb, sps[1]); /* profile */ -- cgit v1.2.3 From d10361b65856982fe17032590f490d494f1a01e4 Mon Sep 17 00:00:00 2001 From: Martin Storsjö Date: Wed, 9 Nov 2011 00:48:40 +0200 Subject: avio: Free URLContext private data allocated via AVOptions MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Martin Storsjö --- libavformat/avio.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) (limited to 'libavformat') diff --git a/libavformat/avio.c b/libavformat/avio.c index a954aa8170..8e1854976e 100644 --- a/libavformat/avio.c +++ b/libavformat/avio.c @@ -335,8 +335,11 @@ int ffurl_close(URLContext *h) #if CONFIG_NETWORK ff_network_close(); #endif - if (h->prot->priv_data_size) + if (h->prot->priv_data_size) { + if (h->prot->priv_data_class) + av_opt_free(h->priv_data); av_free(h->priv_data); + } av_free(h); return ret; } -- cgit v1.2.3 From eaa8c1f9fe254ea0e370e57fec1f5439a50894e8 Mon Sep 17 00:00:00 2001 From: Martin Storsjö Date: Wed, 9 Nov 2011 00:50:37 +0200 Subject: crypto: Don't manually free memory allocated via AVOptions MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Martin Storsjö --- libavformat/crypto.c | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) (limited to 'libavformat') diff --git a/libavformat/crypto.c b/libavformat/crypto.c index b9d3e0326f..2f0e2bd1ee 100644 --- a/libavformat/crypto.c +++ b/libavformat/crypto.c @@ -61,7 +61,7 @@ static const AVClass crypto_class = { static int crypto_open(URLContext *h, const char *uri, int flags) { const char *nested_url; - int ret; + int ret = 0; CryptoContext *c = h->priv_data; if (!av_strstart(uri, "crypto+", &nested_url) && @@ -95,10 +95,7 @@ static int crypto_open(URLContext *h, const char *uri, int flags) h->is_streamed = 1; - return 0; err: - av_freep(&c->key); - av_freep(&c->iv); return ret; } @@ -157,8 +154,6 @@ static int crypto_close(URLContext *h) if (c->hd) ffurl_close(c->hd); av_freep(&c->aes); - av_freep(&c->key); - av_freep(&c->iv); return 0; } -- cgit v1.2.3 From 10da1e913b46eb424b1f89fe8c60e6536713be11 Mon Sep 17 00:00:00 2001 From: Martin Storsjö Date: Mon, 7 Nov 2011 11:43:13 +0200 Subject: http: Make custom headers settable via an AVOption MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Martin Storsjö --- libavformat/http.c | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) (limited to 'libavformat') diff --git a/libavformat/http.c b/libavformat/http.c index 52e1886bef..71ada6ce30 100644 --- a/libavformat/http.c +++ b/libavformat/http.c @@ -47,13 +47,14 @@ typedef struct { int64_t off, filesize; char location[MAX_URL_SIZE]; HTTPAuthState auth_state; - unsigned char headers[BUFFER_SIZE]; + char *headers; int willclose; /**< Set if the server correctly handles Connection: close and will close the connection after feeding us the content. */ } HTTPContext; #define OFFSET(x) offsetof(HTTPContext, x) static const AVOption options[] = { {"chunksize", "use chunked transfer-encoding for posts, -1 disables it, 0 enables it", OFFSET(chunksize), AV_OPT_TYPE_INT64, {.dbl = 0}, -1, 0 }, /* Default to 0, for chunked POSTs */ +{"headers", "custom HTTP headers, can override built in default headers", OFFSET(headers), AV_OPT_TYPE_STRING }, {NULL} }; static const AVClass httpcontext_class = { @@ -69,12 +70,9 @@ static int http_connect(URLContext *h, const char *path, const char *hoststr, void ff_http_set_headers(URLContext *h, const char *headers) { HTTPContext *s = h->priv_data; - int len = strlen(headers); - if (len && strcmp("\r\n", headers + len - 2)) - av_log(h, AV_LOG_ERROR, "No trailing CRLF found in HTTP header.\n"); - - av_strlcpy(s->headers, headers, sizeof(s->headers)); + av_freep(&s->headers); + s->headers = av_strdup(headers); } void ff_http_init_auth_state(URLContext *dest, const URLContext *src) @@ -168,6 +166,12 @@ static int http_open(URLContext *h, const char *uri, int flags) s->filesize = -1; av_strlcpy(s->location, uri, sizeof(s->location)); + if (s->headers) { + int len = strlen(s->headers); + if (len < 2 || strcmp("\r\n", s->headers + len - 2)) + av_log(h, AV_LOG_ERROR, "No trailing CRLF found in HTTP header.\n"); + } + return http_open_cnx(h); } static int http_getc(HTTPContext *s) @@ -285,6 +289,8 @@ static int process_line(URLContext *h, char *line, int line_count, static inline int has_header(const char *str, const char *header) { /* header + 2 to skip over CRLF prefix. (make sure you have one!) */ + if (!str) + return 0; return av_stristart(str, header + 2, NULL) || av_stristr(str, header); } @@ -323,7 +329,8 @@ static int http_connect(URLContext *h, const char *path, const char *hoststr, "Host: %s\r\n", hoststr); /* now add in custom headers */ - av_strlcpy(headers+len, s->headers, sizeof(headers)-len); + if (s->headers) + av_strlcpy(headers + len, s->headers, sizeof(headers) - len); snprintf(s->buffer, sizeof(s->buffer), "%s %s HTTP/1.1\r\n" -- cgit v1.2.3 From 196bf28c5d858e1594f9677fcab8677aca17ad33 Mon Sep 17 00:00:00 2001 From: Martin Storsjö Date: Mon, 7 Nov 2011 11:45:57 +0200 Subject: rtsp: Set http custom headers via the AVOption MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Martin Storsjö --- libavformat/rtsp.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'libavformat') diff --git a/libavformat/rtsp.c b/libavformat/rtsp.c index 84cf922c26..862582aaa8 100644 --- a/libavformat/rtsp.c +++ b/libavformat/rtsp.c @@ -1462,7 +1462,7 @@ redirect: "Pragma: no-cache\r\n" "Cache-Control: no-cache\r\n", sessioncookie); - ff_http_set_headers(rt->rtsp_hd, headers); + av_opt_set(rt->rtsp_hd->priv_data, "headers", headers, 0); /* complete the connection */ if (ffurl_connect(rt->rtsp_hd)) { @@ -1485,7 +1485,7 @@ redirect: "Content-Length: 32767\r\n" "Expires: Sun, 9 Jan 1972 00:00:00 GMT\r\n", sessioncookie); - ff_http_set_headers(rt->rtsp_hd_out, headers); + av_opt_set(rt->rtsp_hd_out->priv_data, "headers", headers, 0); av_opt_set(rt->rtsp_hd_out->priv_data, "chunksize", "-1", 0); /* Initialize the authentication state for the POST session. The HTTP -- cgit v1.2.3 From 27fad11b5b0d2ae48f3ffe0a88d012bc8cdf90df Mon Sep 17 00:00:00 2001 From: Martin Storsjö Date: Mon, 7 Nov 2011 11:48:51 +0200 Subject: mms: Set http custom headers via the AVOption MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Martin Storsjö --- libavformat/mmsh.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) (limited to 'libavformat') diff --git a/libavformat/mmsh.c b/libavformat/mmsh.c index 0ce282c906..cbce2f5284 100644 --- a/libavformat/mmsh.c +++ b/libavformat/mmsh.c @@ -28,6 +28,7 @@ #include #include "libavutil/intreadwrite.h" #include "libavutil/avstring.h" +#include "libavutil/opt.h" #include "internal.h" #include "mms.h" #include "asf.h" @@ -245,7 +246,7 @@ static int mmsh_open(URLContext *h, const char *uri, int flags) CLIENTGUID "Connection: Close\r\n\r\n", host, port, mmsh->request_seq++); - ff_http_set_headers(mms->mms_hd, headers); + av_opt_set(mms->mms_hd->priv_data, "headers", headers, 0); err = ffurl_connect(mms->mms_hd); if (err) { @@ -291,7 +292,7 @@ static int mmsh_open(URLContext *h, const char *uri, int flags) goto fail; } av_dlog(NULL, "out_buffer is %s", headers); - ff_http_set_headers(mms->mms_hd, headers); + av_opt_set(mms->mms_hd->priv_data, "headers", headers, 0); err = ffurl_connect(mms->mms_hd); if (err) { -- cgit v1.2.3 From 7590061eb728f437a968989edf69fb7bf3fa67c3 Mon Sep 17 00:00:00 2001 From: Martin Storsjö Date: Mon, 7 Nov 2011 11:46:29 +0200 Subject: http: Remove the now unused ff_http_set_headers custom function MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Martin Storsjö --- libavformat/http.c | 8 -------- libavformat/http.h | 18 ------------------ 2 files changed, 26 deletions(-) (limited to 'libavformat') diff --git a/libavformat/http.c b/libavformat/http.c index 71ada6ce30..326ed0f796 100644 --- a/libavformat/http.c +++ b/libavformat/http.c @@ -67,14 +67,6 @@ static const AVClass httpcontext_class = { static int http_connect(URLContext *h, const char *path, const char *hoststr, const char *auth, int *new_location); -void ff_http_set_headers(URLContext *h, const char *headers) -{ - HTTPContext *s = h->priv_data; - - av_freep(&s->headers); - s->headers = av_strdup(headers); -} - void ff_http_init_auth_state(URLContext *dest, const URLContext *src) { memcpy(&((HTTPContext*)dest->priv_data)->auth_state, diff --git a/libavformat/http.h b/libavformat/http.h index bd63a190dc..8dfb192364 100644 --- a/libavformat/http.h +++ b/libavformat/http.h @@ -24,24 +24,6 @@ #include "url.h" -/** - * Set custom HTTP headers. - * A trailing CRLF ("\r\n") is required for custom headers. - * Passing in an empty header string ("\0") will reset to defaults. - * - * The following headers can be overriden by custom values, - * otherwise they will be set to their defaults. - * -User-Agent - * -Accept - * -Range - * -Host - * -Connection - * - * @param h URL context for this HTTP connection - * @param headers the custom headers to set - */ -void ff_http_set_headers(URLContext *h, const char *headers); - /** * Initialize the authentication state based on another HTTP URLContext. * This can be used to pre-initialize the authentication parameters if -- cgit v1.2.3 From 8ef79f42cadb0f6eefb033c62422d4c87f260cda Mon Sep 17 00:00:00 2001 From: Martin Storsjö Date: Wed, 9 Nov 2011 01:14:05 +0200 Subject: http: Change an error log message to a warning MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Martin Storsjö --- libavformat/http.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'libavformat') diff --git a/libavformat/http.c b/libavformat/http.c index 326ed0f796..783ac6ab78 100644 --- a/libavformat/http.c +++ b/libavformat/http.c @@ -161,7 +161,7 @@ static int http_open(URLContext *h, const char *uri, int flags) if (s->headers) { int len = strlen(s->headers); if (len < 2 || strcmp("\r\n", s->headers + len - 2)) - av_log(h, AV_LOG_ERROR, "No trailing CRLF found in HTTP header.\n"); + av_log(h, AV_LOG_WARNING, "No trailing CRLF found in HTTP header.\n"); } return http_open_cnx(h); -- cgit v1.2.3 From 3b384502f2950dd8f172060bfa74447a665af6d9 Mon Sep 17 00:00:00 2001 From: Anton Khirnov Date: Sat, 5 Nov 2011 12:54:01 +0100 Subject: http: use different classes for http and https. --- libavformat/http.c | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) (limited to 'libavformat') diff --git a/libavformat/http.c b/libavformat/http.c index 783ac6ab78..5c47f1dd60 100644 --- a/libavformat/http.c +++ b/libavformat/http.c @@ -57,13 +57,17 @@ static const AVOption options[] = { {"headers", "custom HTTP headers, can override built in default headers", OFFSET(headers), AV_OPT_TYPE_STRING }, {NULL} }; -static const AVClass httpcontext_class = { - .class_name = "HTTP", - .item_name = av_default_item_name, - .option = options, - .version = LIBAVUTIL_VERSION_INT, +#define HTTP_CLASS(flavor)\ +static const AVClass flavor ## _context_class = {\ + .class_name = #flavor,\ + .item_name = av_default_item_name,\ + .option = options,\ + .version = LIBAVUTIL_VERSION_INT,\ }; +HTTP_CLASS(http); +HTTP_CLASS(https); + static int http_connect(URLContext *h, const char *path, const char *hoststr, const char *auth, int *new_location); @@ -518,7 +522,7 @@ URLProtocol ff_http_protocol = { .url_close = http_close, .url_get_file_handle = http_get_file_handle, .priv_data_size = sizeof(HTTPContext), - .priv_data_class = &httpcontext_class, + .priv_data_class = &http_context_class, }; #endif #if CONFIG_HTTPS_PROTOCOL @@ -531,6 +535,6 @@ URLProtocol ff_https_protocol = { .url_close = http_close, .url_get_file_handle = http_get_file_handle, .priv_data_size = sizeof(HTTPContext), - .priv_data_class = &httpcontext_class, + .priv_data_class = &https_context_class, }; #endif -- cgit v1.2.3 From 34ff0e2915005964bf9465a3ff3a405c6e45791b Mon Sep 17 00:00:00 2001 From: Anton Khirnov Date: Sat, 5 Nov 2011 12:48:02 +0100 Subject: tls: use AVIO_FLAG_NONBLOCK instead of deprecated URL_FLAG_NONBLOCK --- libavformat/tls.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'libavformat') diff --git a/libavformat/tls.c b/libavformat/tls.c index bd73febd4d..f89a717b7a 100644 --- a/libavformat/tls.c +++ b/libavformat/tls.c @@ -91,7 +91,7 @@ static int do_tls_poll(URLContext *h, int ret) return AVERROR(EIO); } #endif - if (h->flags & URL_FLAG_NONBLOCK) + if (h->flags & AVIO_FLAG_NONBLOCK) return AVERROR(EAGAIN); while (1) { int n = poll(&p, 1, 100); -- cgit v1.2.3 From dc86ca1ab54c04f15214e6fc023d6dfc627aee34 Mon Sep 17 00:00:00 2001 From: Anton Khirnov Date: Sat, 5 Nov 2011 14:07:13 +0100 Subject: crypto: add decoding flag to options. --- libavformat/crypto.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) (limited to 'libavformat') diff --git a/libavformat/crypto.c b/libavformat/crypto.c index 2f0e2bd1ee..ea417470b6 100644 --- a/libavformat/crypto.c +++ b/libavformat/crypto.c @@ -45,9 +45,10 @@ typedef struct { } CryptoContext; #define OFFSET(x) offsetof(CryptoContext, x) +#define D AV_OPT_FLAG_DECODING_PARAM static const AVOption options[] = { - {"key", "AES decryption key", OFFSET(key), AV_OPT_TYPE_BINARY }, - {"iv", "AES decryption initialization vector", OFFSET(iv), AV_OPT_TYPE_BINARY }, + {"key", "AES decryption key", OFFSET(key), AV_OPT_TYPE_BINARY, .flags = D }, + {"iv", "AES decryption initialization vector", OFFSET(iv), AV_OPT_TYPE_BINARY, .flags = D }, { NULL } }; -- cgit v1.2.3 From a2519280601209cc7f492e8e010efbaf1e0d7429 Mon Sep 17 00:00:00 2001 From: Anton Khirnov Date: Thu, 10 Nov 2011 09:34:58 +0100 Subject: http: Add encoding/decoding flags to the AVOptions MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Martin Storsjö --- libavformat/http.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) (limited to 'libavformat') diff --git a/libavformat/http.c b/libavformat/http.c index 5c47f1dd60..7cb65338ce 100644 --- a/libavformat/http.c +++ b/libavformat/http.c @@ -52,9 +52,11 @@ typedef struct { } HTTPContext; #define OFFSET(x) offsetof(HTTPContext, x) +#define D AV_OPT_FLAG_DECODING_PARAM +#define E AV_OPT_FLAG_ENCODING_PARAM static const AVOption options[] = { -{"chunksize", "use chunked transfer-encoding for posts, -1 disables it, 0 enables it", OFFSET(chunksize), AV_OPT_TYPE_INT64, {.dbl = 0}, -1, 0 }, /* Default to 0, for chunked POSTs */ -{"headers", "custom HTTP headers, can override built in default headers", OFFSET(headers), AV_OPT_TYPE_STRING }, +{"chunksize", "use chunked transfer-encoding for posts, -1 disables it, 0 enables it", OFFSET(chunksize), AV_OPT_TYPE_INT64, {.dbl = 0}, -1, 0, E }, /* Default to 0, for chunked POSTs */ +{"headers", "custom HTTP headers, can override built in default headers", OFFSET(headers), AV_OPT_TYPE_STRING, { 0 }, 0, 0, D|E }, {NULL} }; #define HTTP_CLASS(flavor)\ -- cgit v1.2.3 From 6149485f6c6c2e600987a2759d97c546d4cf5da0 Mon Sep 17 00:00:00 2001 From: Martin Storsjö Date: Thu, 10 Nov 2011 11:03:35 +0200 Subject: http: Change the chunksize AVOption into chunked_post MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The chunksize internal variable has two different uses - for reading, it's the amount of data left of the current chunk (or -1 if the server doesn't send data in chunked mode), where it's only an internal state variable. For writing, it's used to decide whether to enable chunked encoding (by default), by using the value 0, or disable chunked encoding (value -1). This, while consistent, doesn't make much sense to expose as an AVOption. This splits the usage of the internal variable into two variables, chunksize which is used for reading (as before), and chunked_post which is the user-settable option, with the values 0 and 1, where 1 is default. Signed-off-by: Martin Storsjö --- libavformat/http.c | 9 +++++---- libavformat/rtsp.c | 2 +- 2 files changed, 6 insertions(+), 5 deletions(-) (limited to 'libavformat') diff --git a/libavformat/http.c b/libavformat/http.c index 7cb65338ce..d5c02ddce0 100644 --- a/libavformat/http.c +++ b/libavformat/http.c @@ -49,13 +49,14 @@ typedef struct { HTTPAuthState auth_state; char *headers; int willclose; /**< Set if the server correctly handles Connection: close and will close the connection after feeding us the content. */ + int chunked_post; } HTTPContext; #define OFFSET(x) offsetof(HTTPContext, x) #define D AV_OPT_FLAG_DECODING_PARAM #define E AV_OPT_FLAG_ENCODING_PARAM static const AVOption options[] = { -{"chunksize", "use chunked transfer-encoding for posts, -1 disables it, 0 enables it", OFFSET(chunksize), AV_OPT_TYPE_INT64, {.dbl = 0}, -1, 0, E }, /* Default to 0, for chunked POSTs */ +{"chunked_post", "use chunked transfer-encoding for posts", OFFSET(chunked_post), AV_OPT_TYPE_INT, {.dbl = 1}, 0, 1, E }, {"headers", "custom HTTP headers, can override built in default headers", OFFSET(headers), AV_OPT_TYPE_STRING, { 0 }, 0, 0, D|E }, {NULL} }; @@ -338,7 +339,7 @@ static int http_connect(URLContext *h, const char *path, const char *hoststr, "\r\n", post ? "POST" : "GET", path, - post && s->chunksize >= 0 ? "Transfer-Encoding: chunked\r\n" : "", + post && s->chunked_post ? "Transfer-Encoding: chunked\r\n" : "", headers, authstr ? authstr : ""); @@ -435,7 +436,7 @@ static int http_write(URLContext *h, const uint8_t *buf, int size) char crlf[] = "\r\n"; HTTPContext *s = h->priv_data; - if (s->chunksize == -1) { + if (!s->chunked_post) { /* non-chunked data is sent without any special encoding */ return ffurl_write(s->hd, buf, size); } @@ -461,7 +462,7 @@ static int http_close(URLContext *h) HTTPContext *s = h->priv_data; /* signal end of chunked encoding if used */ - if ((h->flags & AVIO_FLAG_WRITE) && s->chunksize != -1) { + if ((h->flags & AVIO_FLAG_WRITE) && s->chunked_post) { ret = ffurl_write(s->hd, footer, sizeof(footer) - 1); ret = ret > 0 ? 0 : ret; } diff --git a/libavformat/rtsp.c b/libavformat/rtsp.c index 862582aaa8..8f7bd3718f 100644 --- a/libavformat/rtsp.c +++ b/libavformat/rtsp.c @@ -1486,7 +1486,7 @@ redirect: "Expires: Sun, 9 Jan 1972 00:00:00 GMT\r\n", sessioncookie); av_opt_set(rt->rtsp_hd_out->priv_data, "headers", headers, 0); - av_opt_set(rt->rtsp_hd_out->priv_data, "chunksize", "-1", 0); + av_opt_set(rt->rtsp_hd_out->priv_data, "chunked_post", "0", 0); /* Initialize the authentication state for the POST session. The HTTP * protocol implementation doesn't properly handle multi-pass -- cgit v1.2.3 From f2d0015531a05587de87575ff73c95b1f95b6df7 Mon Sep 17 00:00:00 2001 From: Martin Storsjö Date: Thu, 10 Nov 2011 11:09:26 +0200 Subject: http: Don't add a Range: bytes=0- header for POST MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit That header simply doesn't make sense in that context. Signed-off-by: Martin Storsjö --- libavformat/http.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'libavformat') diff --git a/libavformat/http.c b/libavformat/http.c index d5c02ddce0..83ffc0b60e 100644 --- a/libavformat/http.c +++ b/libavformat/http.c @@ -317,7 +317,7 @@ static int http_connect(URLContext *h, const char *path, const char *hoststr, if (!has_header(s->headers, "\r\nAccept: ")) len += av_strlcpy(headers + len, "Accept: */*\r\n", sizeof(headers) - len); - if (!has_header(s->headers, "\r\nRange: ")) + if (!has_header(s->headers, "\r\nRange: ") && !post) len += av_strlcatf(headers + len, sizeof(headers) - len, "Range: bytes=%"PRId64"-\r\n", s->off); if (!has_header(s->headers, "\r\nConnection: ")) -- cgit v1.2.3 From 371d15ec361168d7f0d43b6f717da231c3b9e433 Mon Sep 17 00:00:00 2001 From: Martin Storsjö Date: Thu, 10 Nov 2011 17:52:38 +0200 Subject: tls: Use the URLContext as logging context MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Martin Storsjö --- libavformat/tls.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) (limited to 'libavformat') diff --git a/libavformat/tls.c b/libavformat/tls.c index f89a717b7a..8211e88846 100644 --- a/libavformat/tls.c +++ b/libavformat/tls.c @@ -73,7 +73,7 @@ static int do_tls_poll(URLContext *h, int ret) struct pollfd p = { c->fd, 0, 0 }; #if CONFIG_GNUTLS if (ret != GNUTLS_E_AGAIN && ret != GNUTLS_E_INTERRUPTED) { - av_log(NULL, AV_LOG_ERROR, "%s\n", gnutls_strerror(ret)); + av_log(h, AV_LOG_ERROR, "%s\n", gnutls_strerror(ret)); return AVERROR(EIO); } if (gnutls_record_get_direction(c->session)) @@ -87,7 +87,7 @@ static int do_tls_poll(URLContext *h, int ret) } else if (ret == SSL_ERROR_WANT_WRITE) { p.events = POLLOUT; } else { - av_log(NULL, AV_LOG_ERROR, "%s\n", ERR_error_string(ERR_get_error(), NULL)); + av_log(h, AV_LOG_ERROR, "%s\n", ERR_error_string(ERR_get_error(), NULL)); return AVERROR(EIO); } #endif @@ -148,13 +148,13 @@ static int tls_open(URLContext *h, const char *uri, int flags) #elif CONFIG_OPENSSL c->ctx = SSL_CTX_new(SSLv3_client_method()); if (!c->ctx) { - av_log(NULL, AV_LOG_ERROR, "%s\n", ERR_error_string(ERR_get_error(), NULL)); + av_log(h, AV_LOG_ERROR, "%s\n", ERR_error_string(ERR_get_error(), NULL)); ret = AVERROR(EIO); goto fail; } c->ssl = SSL_new(c->ctx); if (!c->ssl) { - av_log(NULL, AV_LOG_ERROR, "%s\n", ERR_error_string(ERR_get_error(), NULL)); + av_log(h, AV_LOG_ERROR, "%s\n", ERR_error_string(ERR_get_error(), NULL)); ret = AVERROR(EIO); goto fail; } @@ -166,7 +166,7 @@ static int tls_open(URLContext *h, const char *uri, int flags) if (ret > 0) break; if (ret == 0) { - av_log(NULL, AV_LOG_ERROR, "Unable to negotiate TLS/SSL session\n"); + av_log(h, AV_LOG_ERROR, "Unable to negotiate TLS/SSL session\n"); ret = AVERROR(EIO); goto fail; } -- cgit v1.2.3