You've already forked FFmpeg
mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2025-08-04 22:03:09 +02:00
avformat/rtsp: check copy_tls_opts_dict
Properly check av_dict_set return values and propagate them to the caller so they can be handled.
This commit is contained in:
@ -143,18 +143,29 @@ static AVDictionary *map_to_opts(RTSPState *rt)
|
|||||||
return opts;
|
return opts;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#define ERR_RET(c) \
|
||||||
|
do { \
|
||||||
|
int ret = c; \
|
||||||
|
if (ret < 0) \
|
||||||
|
return ret; \
|
||||||
|
} while (0)
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Add the TLS options of the given RTSPState to the dict
|
* Add the TLS options of the given RTSPState to the dict
|
||||||
*/
|
*/
|
||||||
static void copy_tls_opts_dict(RTSPState *rt, AVDictionary **dict)
|
static int copy_tls_opts_dict(RTSPState *rt, AVDictionary **dict)
|
||||||
{
|
{
|
||||||
av_dict_set_int(dict, "tls_verify", rt->tls_opts.verify, 0);
|
ERR_RET(av_dict_set_int(dict, "tls_verify", rt->tls_opts.verify, 0));
|
||||||
av_dict_set(dict, "ca_file", rt->tls_opts.ca_file, 0);
|
ERR_RET(av_dict_set(dict, "ca_file", rt->tls_opts.ca_file, 0));
|
||||||
av_dict_set(dict, "cert_file", rt->tls_opts.cert_file, 0);
|
ERR_RET(av_dict_set(dict, "cert_file", rt->tls_opts.cert_file, 0));
|
||||||
av_dict_set(dict, "key_file", rt->tls_opts.key_file, 0);
|
ERR_RET(av_dict_set(dict, "key_file", rt->tls_opts.key_file, 0));
|
||||||
av_dict_set(dict, "verifyhost", rt->tls_opts.host, 0);
|
ERR_RET(av_dict_set(dict, "verifyhost", rt->tls_opts.host, 0));
|
||||||
|
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#undef ERR_RET
|
||||||
|
|
||||||
static void get_word_until_chars(char *buf, int buf_size,
|
static void get_word_until_chars(char *buf, int buf_size,
|
||||||
const char *sep, const char **pp)
|
const char *sep, const char **pp)
|
||||||
{
|
{
|
||||||
@ -1837,8 +1848,14 @@ redirect:
|
|||||||
AVDictionary *options = NULL;
|
AVDictionary *options = NULL;
|
||||||
|
|
||||||
av_dict_set_int(&options, "timeout", rt->stimeout, 0);
|
av_dict_set_int(&options, "timeout", rt->stimeout, 0);
|
||||||
if (https_tunnel)
|
if (https_tunnel) {
|
||||||
copy_tls_opts_dict(rt, &options);
|
int ret = copy_tls_opts_dict(rt, &options);
|
||||||
|
if (ret < 0) {
|
||||||
|
av_dict_free(&options);
|
||||||
|
err = ret;
|
||||||
|
goto fail;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
ff_url_join(httpname, sizeof(httpname), https_tunnel ? "https" : "http", auth, host, port, "%s", path);
|
ff_url_join(httpname, sizeof(httpname), https_tunnel ? "https" : "http", auth, host, port, "%s", path);
|
||||||
snprintf(sessioncookie, sizeof(sessioncookie), "%08x%08x",
|
snprintf(sessioncookie, sizeof(sessioncookie), "%08x%08x",
|
||||||
@ -1927,8 +1944,14 @@ redirect:
|
|||||||
int ret;
|
int ret;
|
||||||
/* open the tcp connection */
|
/* open the tcp connection */
|
||||||
AVDictionary *proto_opts = NULL;
|
AVDictionary *proto_opts = NULL;
|
||||||
if (strcmp("tls", lower_rtsp_proto) == 0)
|
if (strcmp("tls", lower_rtsp_proto) == 0) {
|
||||||
copy_tls_opts_dict(rt, &proto_opts);
|
ret = copy_tls_opts_dict(rt, &proto_opts);
|
||||||
|
if (ret < 0) {
|
||||||
|
av_dict_free(&proto_opts);
|
||||||
|
err = ret;
|
||||||
|
goto fail;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
ff_url_join(tcpname, sizeof(tcpname), lower_rtsp_proto, NULL,
|
ff_url_join(tcpname, sizeof(tcpname), lower_rtsp_proto, NULL,
|
||||||
host, port,
|
host, port,
|
||||||
|
Reference in New Issue
Block a user