From daee46ed7efa71ac317abfa835c3d3d00fd8eab4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kacper=20Michaj=C5=82ow?= Date: Tue, 29 Jul 2025 00:39:18 +0200 Subject: [PATCH] Revert "avformat/tls_openssl: properly get new BIO index" MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit BIO_get_new_index() is static counter meant to get index for custom bio type definition. As we can read in the documentation: > Note that BIO_get_new_index() can only be used 127 times before it > returns an error. We cannot call it repeatedly, because it will fail eventually. To my understanding the index is not needed in our use and we could safely use BIO_TYPE_NONE. Documentation states: > type can be set to either BIO_TYPE_NONE or via BIO_get_new_index() if > a unique type is required for searching (See BIO_find_type(3)) We don't use any search related functions. This reverts commit 816dad231f5b312fd98e81cc6a6cbaf47c1e26a5. Fixes: https://github.com/mpv-player/mpv/issues/16589 Signed-off-by: Kacper Michajłow --- libavformat/tls_openssl.c | 18 ++++-------------- 1 file changed, 4 insertions(+), 14 deletions(-) diff --git a/libavformat/tls_openssl.c b/libavformat/tls_openssl.c index 0a7998210f..499cd19ef5 100644 --- a/libavformat/tls_openssl.c +++ b/libavformat/tls_openssl.c @@ -659,14 +659,11 @@ static int url_bio_bputs(BIO *b, const char *str) return url_bio_bwrite(b, str, strlen(str)); } -static av_cold int init_bio_method(URLContext *h) +static av_cold void init_bio_method(URLContext *h) { TLSContext *p = h->priv_data; BIO *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"); + p->url_bio_method = BIO_meth_new(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); @@ -677,7 +674,6 @@ static av_cold int 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) { @@ -874,11 +870,7 @@ 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, c->mtu); DTLS_set_link_mtu(p->ssl, c->mtu); - - ret = init_bio_method(h); - if (ret < 0) - goto fail; - + init_bio_method(h); if (p->tls_shared.external_sock != 1) { if ((ret = ff_tls_open_underlying(&p->tls_shared, h, url, options)) < 0) { av_log(p, AV_LOG_ERROR, "Failed to connect %s\n", url); @@ -956,9 +948,7 @@ 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); - ret = init_bio_method(h); - if (ret < 0) - goto fail; + init_bio_method(h); if (!c->listen && !c->numerichost) { // By default OpenSSL does too lax wildcard matching SSL_set_hostflags(p->ssl, X509_CHECK_FLAG_NO_PARTIAL_WILDCARDS);