You've already forked FFmpeg
mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2025-08-04 22:03:09 +02:00
avformat/tls_openssl: properly get new BIO index
As noted in the OpenSSL documentation, BIO_get_new_index must be used to get a new BIO index. This is ORd with the proper type flag BIO_TYPE_SOURCE_SINK.
This commit is contained in:
@ -613,11 +613,14 @@ static int url_bio_bputs(BIO *b, const char *str)
|
||||
return url_bio_bwrite(b, str, strlen(str));
|
||||
}
|
||||
|
||||
static av_cold void init_bio_method(URLContext *h)
|
||||
static av_cold int init_bio_method(URLContext *h)
|
||||
{
|
||||
TLSContext *p = h->priv_data;
|
||||
BIO *bio;
|
||||
p->url_bio_method = BIO_meth_new(BIO_TYPE_SOURCE_SINK, "urlprotocol bio");
|
||||
int bio_idx = BIO_get_new_index();
|
||||
if (bio_idx == -1)
|
||||
return AVERROR_EXTERNAL;
|
||||
p->url_bio_method = BIO_meth_new(bio_idx | BIO_TYPE_SOURCE_SINK, "urlprotocol bio");
|
||||
BIO_meth_set_write(p->url_bio_method, url_bio_bwrite);
|
||||
BIO_meth_set_read(p->url_bio_method, url_bio_bread);
|
||||
BIO_meth_set_puts(p->url_bio_method, url_bio_bputs);
|
||||
@ -628,6 +631,7 @@ static av_cold void init_bio_method(URLContext *h)
|
||||
BIO_set_data(bio, p);
|
||||
|
||||
SSL_set_bio(p->ssl, bio, bio);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void openssl_info_callback(const SSL *ssl, int where, int ret) {
|
||||
@ -822,7 +826,9 @@ static int dtls_start(URLContext *h, const char *url, int flags, AVDictionary **
|
||||
SSL_set_options(p->ssl, SSL_OP_NO_QUERY_MTU);
|
||||
SSL_set_mtu(p->ssl, p->tls_shared.mtu);
|
||||
DTLS_set_link_mtu(p->ssl, p->tls_shared.mtu);
|
||||
init_bio_method(h);
|
||||
ret = init_bio_method(h);
|
||||
if (ret < 0)
|
||||
goto fail;
|
||||
|
||||
if (p->tls_shared.use_external_udp != 1) {
|
||||
if ((ret = ff_tls_open_underlying(&p->tls_shared, h, url, options)) < 0) {
|
||||
@ -909,7 +915,9 @@ static int tls_open(URLContext *h, const char *uri, int flags, AVDictionary **op
|
||||
}
|
||||
SSL_set_ex_data(p->ssl, 0, p);
|
||||
SSL_CTX_set_info_callback(p->ctx, openssl_info_callback);
|
||||
init_bio_method(h);
|
||||
ret = init_bio_method(h);
|
||||
if (ret < 0)
|
||||
goto fail;
|
||||
if (!c->listen && !c->numerichost)
|
||||
SSL_set_tlsext_host_name(p->ssl, c->host);
|
||||
ret = c->listen ? SSL_accept(p->ssl) : SSL_connect(p->ssl);
|
||||
|
Reference in New Issue
Block a user