Skip to content

[PR #12069/3a39006d backport][3.14] Upgrade to llhttp 3.9.1#12072

Open
patchback[bot] wants to merge 1 commit into3.14from
patchback/backports/3.14/3a39006da33970ac4b46256558ea2add7b4bd075/pr-12069
Open

[PR #12069/3a39006d backport][3.14] Upgrade to llhttp 3.9.1#12072
patchback[bot] wants to merge 1 commit into3.14from
patchback/backports/3.14/3a39006da33970ac4b46256558ea2add7b4bd075/pr-12069

Conversation

@patchback
Copy link
Contributor

@patchback patchback bot commented Feb 15, 2026

This is a backport of PR #12069 as merged into master (3a39006).

None

(cherry picked from commit 3a39006)
@patchback patchback bot mentioned this pull request Feb 15, 2026
@codecov
Copy link

codecov bot commented Feb 15, 2026

❌ 1 Tests Failed:

Tests completed Failed Passed Skipped
4347 1 4346 47
View the full list of 1 ❄️ flaky test(s)
tests.test_proxy_functional::test_uvloop_secure_https_proxy

Flake rate in main: 3.45% (Passed 28 times, Failed 1 times)

Stack Traces | 1.01s run time
self = <aiohttp.connector.TCPConnector object at 0x108dbf7c0>
underlying_transport = <uvloop.loop._SSLProtocolTransport object at 0x10a922540>
req = <aiohttp.client_reqrep.ClientRequest object at 0x108dbcfa0>
timeout = ClientTimeout(total=300, connect=None, sock_read=None, sock_connect=30, ceil_threshold=5)
client_error = <class 'aiohttp.client_exceptions.ClientConnectorError'>

    #x1B[0m#x1B[94masync#x1B[39;49;00m #x1B[94mdef#x1B[39;49;00m#x1B[90m #x1B[39;49;00m#x1B[92m_start_tls_connection#x1B[39;49;00m(#x1B[90m#x1B[39;49;00m
        #x1B[96mself#x1B[39;49;00m,#x1B[90m#x1B[39;49;00m
        underlying_transport: asyncio.Transport,#x1B[90m#x1B[39;49;00m
        req: ClientRequest,#x1B[90m#x1B[39;49;00m
        timeout: #x1B[33m"#x1B[39;49;00m#x1B[33mClientTimeout#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m,#x1B[90m#x1B[39;49;00m
        client_error: #x1B[96mtype#x1B[39;49;00m[#x1B[96mException#x1B[39;49;00m] = ClientConnectorError,#x1B[90m#x1B[39;49;00m
    ) -> #x1B[96mtuple#x1B[39;49;00m[asyncio.BaseTransport, ResponseHandler]:#x1B[90m#x1B[39;49;00m
    #x1B[90m    #x1B[39;49;00m#x1B[33m"""Wrap the raw TCP transport with TLS."""#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
        tls_proto = #x1B[96mself#x1B[39;49;00m._factory()  #x1B[90m# Create a brand new proto for TLS#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
        sslcontext = #x1B[96mself#x1B[39;49;00m._get_ssl_context(req)#x1B[90m#x1B[39;49;00m
        #x1B[94mif#x1B[39;49;00m TYPE_CHECKING:#x1B[90m#x1B[39;49;00m
            #x1B[90m# _start_tls_connection is unreachable in the current code path#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
            #x1B[90m# if sslcontext is None.#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
            #x1B[94massert#x1B[39;49;00m sslcontext #x1B[95mis#x1B[39;49;00m #x1B[95mnot#x1B[39;49;00m #x1B[94mNone#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
    #x1B[90m#x1B[39;49;00m
        #x1B[94mtry#x1B[39;49;00m:#x1B[90m#x1B[39;49;00m
            #x1B[94masync#x1B[39;49;00m #x1B[94mwith#x1B[39;49;00m ceil_timeout(#x1B[90m#x1B[39;49;00m
                timeout.sock_connect, ceil_threshold=timeout.ceil_threshold#x1B[90m#x1B[39;49;00m
            ):#x1B[90m#x1B[39;49;00m
                #x1B[94mtry#x1B[39;49;00m:#x1B[90m#x1B[39;49;00m
                    #x1B[90m# ssl_shutdown_timeout is only available in Python 3.11+#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
                    #x1B[94mif#x1B[39;49;00m sys.version_info >= (#x1B[94m3#x1B[39;49;00m, #x1B[94m11#x1B[39;49;00m) #x1B[95mand#x1B[39;49;00m #x1B[96mself#x1B[39;49;00m._ssl_shutdown_timeout:#x1B[90m#x1B[39;49;00m
                        tls_transport = #x1B[94mawait#x1B[39;49;00m #x1B[96mself#x1B[39;49;00m._loop.start_tls(#x1B[90m#x1B[39;49;00m
                            underlying_transport,#x1B[90m#x1B[39;49;00m
                            tls_proto,#x1B[90m#x1B[39;49;00m
                            sslcontext,#x1B[90m#x1B[39;49;00m
                            server_hostname=req.server_hostname #x1B[95mor#x1B[39;49;00m req.host,#x1B[90m#x1B[39;49;00m
                            ssl_handshake_timeout=timeout.total,#x1B[90m#x1B[39;49;00m
                            ssl_shutdown_timeout=#x1B[96mself#x1B[39;49;00m._ssl_shutdown_timeout,#x1B[90m#x1B[39;49;00m
                        )#x1B[90m#x1B[39;49;00m
                    #x1B[94melse#x1B[39;49;00m:#x1B[90m#x1B[39;49;00m
>                       tls_transport = #x1B[94mawait#x1B[39;49;00m #x1B[96mself#x1B[39;49;00m._loop.start_tls(#x1B[90m#x1B[39;49;00m
                            underlying_transport,#x1B[90m#x1B[39;49;00m
                            tls_proto,#x1B[90m#x1B[39;49;00m
                            sslcontext,#x1B[90m#x1B[39;49;00m
                            server_hostname=req.server_hostname #x1B[95mor#x1B[39;49;00m req.host,#x1B[90m#x1B[39;49;00m
                            ssl_handshake_timeout=timeout.total,#x1B[90m#x1B[39;49;00m
                        )#x1B[90m#x1B[39;49;00m

client_error = <class 'aiohttp.client_exceptions.ClientConnectorError'>
req        = <aiohttp.client_reqrep.ClientRequest object at 0x108dbcfa0>
self       = <aiohttp.connector.TCPConnector object at 0x108dbf7c0>
sslcontext = <ssl.SSLContext object at 0x10adfb940>
timeout    = ClientTimeout(total=300, connect=None, sock_read=None, sock_connect=30, ceil_threshold=5)
tls_proto  = <aiohttp.client_proto.ResponseHandler object at 0x10b138e20>
underlying_transport = <uvloop.loop._SSLProtocolTransport object at 0x10a922540>

#x1B[1m#x1B[31maiohttp/connector.py#x1B[0m:1443: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
#x1B[1m#x1B[31muvloop/loop.pyx#x1B[0m:1639: in start_tls
    #x1B[0m#x1B[04m#x1B[91m?#x1B[39;49;00m#x1B[04m#x1B[91m?#x1B[39;49;00m#x1B[04m#x1B[91m?#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
#x1B[1m#x1B[31muvloop/loop.pyx#x1B[0m:1632: in uvloop.loop.Loop.start_tls
    #x1B[0m#x1B[04m#x1B[91m?#x1B[39;49;00m#x1B[04m#x1B[91m?#x1B[39;49;00m#x1B[04m#x1B[91m?#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
#x1B[1m#x1B[31muvloop/sslproto.pyx#x1B[0m:517: in uvloop.loop.SSLProtocol._on_handshake_complete
    #x1B[0m#x1B[04m#x1B[91m?#x1B[39;49;00m#x1B[04m#x1B[91m?#x1B[39;49;00m#x1B[04m#x1B[91m?#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
#x1B[1m#x1B[31muvloop/sslproto.pyx#x1B[0m:499: in uvloop.loop.SSLProtocol._do_handshake
    #x1B[0m#x1B[04m#x1B[91m?#x1B[39;49;00m#x1B[04m#x1B[91m?#x1B[39;49;00m#x1B[04m#x1B[91m?#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <ssl.SSLObject object at 0x10b129bd0>

    #x1B[0m#x1B[94mdef#x1B[39;49;00m#x1B[90m #x1B[39;49;00m#x1B[92mdo_handshake#x1B[39;49;00m(#x1B[96mself#x1B[39;49;00m):#x1B[90m#x1B[39;49;00m
    #x1B[90m    #x1B[39;49;00m#x1B[33m"""Start the SSL/TLS handshake."""#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
>       #x1B[96mself#x1B[39;49;00m._sslobj.do_handshake()#x1B[90m#x1B[39;49;00m
#x1B[1m#x1B[31mE       ssl.SSLCertVerificationError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1007)#x1B[0m

self       = <ssl.SSLObject object at 0x10b129bd0>

#x1B[1m#x1B[.../Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/ssl.py#x1B[0m:975: SSLCertVerificationError

#x1B[33mThe above exception was the direct cause of the following exception:#x1B[0m

client_ssl_ctx = <ssl.SSLContext object at 0x10adfb940>
secure_proxy_url = URL('https://127.0.0.1:50266')
uvloop_loop = <uvloop.Loop running=False closed=False debug=False>

    #x1B[0m#x1B[37m@pytest#x1B[39;49;00m.mark.skipif(#x1B[90m#x1B[39;49;00m
        platform.system() == #x1B[33m"#x1B[39;49;00m#x1B[33mWindows#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m #x1B[95mor#x1B[39;49;00m sys.implementation.name != #x1B[33m"#x1B[39;49;00m#x1B[33mcpython#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m,#x1B[90m#x1B[39;49;00m
        reason=#x1B[33m"#x1B[39;49;00m#x1B[33muvloop is not supported on Windows and non-CPython implementations#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m,#x1B[90m#x1B[39;49;00m
    )#x1B[90m#x1B[39;49;00m
    #x1B[37m@pytest#x1B[39;49;00m.mark.filterwarnings(#x1B[33mr#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m#x1B[33mignore:.*ssl.OP_NO_SSL*#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m)#x1B[90m#x1B[39;49;00m
    #x1B[90m# Filter out the warning from#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
    #x1B[90m# https://github.com/abhinavsingh/proxy.py.../proxy/common/utils.py#L226#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
    #x1B[90m# otherwise this test will fail because the proxy will die with an error.#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
    #x1B[94masync#x1B[39;49;00m #x1B[94mdef#x1B[39;49;00m#x1B[90m #x1B[39;49;00m#x1B[92mtest_uvloop_secure_https_proxy#x1B[39;49;00m(#x1B[90m#x1B[39;49;00m
        client_ssl_ctx: ssl.SSLContext,#x1B[90m#x1B[39;49;00m
        secure_proxy_url: URL,#x1B[90m#x1B[39;49;00m
        uvloop_loop: asyncio.AbstractEventLoop,#x1B[90m#x1B[39;49;00m
    ) -> #x1B[94mNone#x1B[39;49;00m:#x1B[90m#x1B[39;49;00m
    #x1B[90m    #x1B[39;49;00m#x1B[33m"""Ensure HTTPS sites are accessible through a secure proxy without warning when using uvloop."""#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
        conn = aiohttp.TCPConnector(force_close=#x1B[94mTrue#x1B[39;49;00m)#x1B[90m#x1B[39;49;00m
        sess = aiohttp.ClientSession(connector=conn)#x1B[90m#x1B[39;49;00m
        #x1B[94mtry#x1B[39;49;00m:#x1B[90m#x1B[39;49;00m
            url = URL(#x1B[33m"#x1B[39;49;00m#x1B[33mhttps://example.com#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m)#x1B[90m#x1B[39;49;00m
    #x1B[90m#x1B[39;49;00m
>           #x1B[94masync#x1B[39;49;00m #x1B[94mwith#x1B[39;49;00m sess.get(#x1B[90m#x1B[39;49;00m
                url, proxy=secure_proxy_url, ssl=client_ssl_ctx#x1B[90m#x1B[39;49;00m
            ) #x1B[94mas#x1B[39;49;00m response:#x1B[90m#x1B[39;49;00m

client_ssl_ctx = <ssl.SSLContext object at 0x10adfb940>
conn       = <aiohttp.connector.TCPConnector object at 0x108dbf7c0>
secure_proxy_url = URL('https://127.0.0.1:50266')
sess       = <aiohttp.client.ClientSession object at 0x108dbc730>
url        = URL('https://example.com')
uvloop_loop = <uvloop.Loop running=False closed=False debug=False>

#x1B[1m#x1B[31mtests/test_proxy_functional.py#x1B[0m:228: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
#x1B[1m#x1B[31maiohttp/client.py#x1B[0m:1605: in __aenter__
    #x1B[0m#x1B[96mself#x1B[39;49;00m._resp: _RetType_co = #x1B[94mawait#x1B[39;49;00m #x1B[96mself#x1B[39;49;00m._coro#x1B[90m#x1B[39;49;00m
        self       = <aiohttp.client._BaseRequestContextManager object at 0x108dbd4b0>
#x1B[1m#x1B[31maiohttp/client.py#x1B[0m:809: in _request
    #x1B[0mresp = #x1B[94mawait#x1B[39;49;00m handler(req)#x1B[90m#x1B[39;49;00m
        _connect_and_send_request = <function ClientSession._request.<locals>._connect_and_send_request at 0x10a9bf370>
        all_cookies = <BaseCookie: >
        allow_redirects = True
        auth       = None
        auth_from_url = None
        auto_decompress = True
        chunked    = None
        compress   = None
        cookies    = None
        data       = None
        effective_middlewares = ()
        expect100  = False
        fingerprint = None
        handle     = None
        handler    = <function ClientSession._request.<locals>._connect_and_send_request at 0x10a9bf370>
        headers    = <CIMultiDict()>
        history    = []
        json       = None
        max_field_size = 8190
        max_headers = 128
        max_line_size = 8190
        max_redirects = 10
        method     = 'GET'
        middlewares = None
        params     = {}
        proxy      = URL('https://127.0.0.1:50266')
        proxy_     = URL('https://127.0.0.1:50266')
        proxy_auth = None
        proxy_headers = <CIMultiDict('Host': 'example.com')>
        raise_for_status = None
        read_bufsize = 65536
        read_until_eof = True
        real_timeout = ClientTimeout(total=300, connect=None, sock_read=None, sock_connect=30, ceil_threshold=5)
        redirects  = 0
        req        = <aiohttp.client_reqrep.ClientRequest object at 0x108dbcfa0>
        retry_persistent_connection = True
        self       = <aiohttp.client.ClientSession object at 0x108dbc730>
        server_hostname = None
        skip_auto_headers = None
        skip_headers = None
        ssl        = <ssl.SSLContext object at 0x10adfb940>
        ssl_context = None
        str_or_url = URL('https://example.com')
        timeout    = <_SENTINEL.sentinel: 1>
        timer      = <aiohttp.helpers.TimerContext object at 0x10b148a40>
        tm         = <aiohttp.helpers.TimeoutHandle object at 0x10b12ea00>
        trace_request_ctx = None
        traces     = []
        url        = URL('https://example.com')
        verify_ssl = None
        version    = HttpVersion(major=1, minor=1)
#x1B[1m#x1B[31maiohttp/client.py#x1B[0m:763: in _connect_and_send_request
    #x1B[0mconn = #x1B[94mawait#x1B[39;49;00m #x1B[96mself#x1B[39;49;00m._connector.connect(#x1B[90m#x1B[39;49;00m
        auto_decompress = True
        max_field_size = 8190
        max_headers = 128
        max_line_size = 8190
        read_bufsize = 65536
        read_until_eof = True
        real_timeout = ClientTimeout(total=300, connect=None, sock_read=None, sock_connect=30, ceil_threshold=5)
        req        = <aiohttp.client_reqrep.ClientRequest object at 0x108dbcfa0>
        self       = <aiohttp.client.ClientSession object at 0x108dbc730>
        timer      = <aiohttp.helpers.TimerContext object at 0x10b148a40>
        traces     = []
#x1B[1m#x1B[31maiohttp/connector.py#x1B[0m:655: in connect
    #x1B[0mproto = #x1B[94mawait#x1B[39;49;00m #x1B[96mself#x1B[39;49;00m._create_connection(req, traces, timeout)#x1B[90m#x1B[39;49;00m
        conn       = None
        key        = ConnectionKey(host='example.com', port=443, is_ssl=True, ssl=<ssl.SSLContext object at 0x10adfb940>, proxy=URL('https://127.0.0.1:50266'), proxy_auth=None, proxy_headers_hash=None)
        placeholder = <aiohttp.connector._TransportPlaceholder object at 0x10b102e00>
        req        = <aiohttp.client_reqrep.ClientRequest object at 0x108dbcfa0>
        self       = <aiohttp.connector.TCPConnector object at 0x108dbf7c0>
        timeout    = ClientTimeout(total=300, connect=None, sock_read=None, sock_connect=30, ceil_threshold=5)
        traces     = []
#x1B[1m#x1B[31maiohttp/connector.py#x1B[0m:1218: in _create_connection
    #x1B[0m_, proto = #x1B[94mawait#x1B[39;49;00m #x1B[96mself#x1B[39;49;00m._create_proxy_connection(req, traces, timeout)#x1B[90m#x1B[39;49;00m
        req        = <aiohttp.client_reqrep.ClientRequest object at 0x108dbcfa0>
        self       = <aiohttp.connector.TCPConnector object at 0x108dbf7c0>
        timeout    = ClientTimeout(total=300, connect=None, sock_read=None, sock_connect=30, ceil_threshold=5)
        traces     = []
#x1B[1m#x1B[31maiohttp/connector.py#x1B[0m:1686: in _create_proxy_connection
    #x1B[0m#x1B[94mreturn#x1B[39;49;00m #x1B[94mawait#x1B[39;49;00m #x1B[96mself#x1B[39;49;00m._start_tls_connection(#x1B[90m#x1B[39;49;00m
        conn       = Connection<ConnectionKey(host='example.com', port=443, is_ssl=True, ssl=<ssl.SSLContext object at 0x10adfb940>, proxy=None, proxy_auth=None, proxy_headers_hash=None)>
        key        = ConnectionKey(host='example.com', port=443, is_ssl=True, ssl=<ssl.SSLContext object at 0x10adfb940>, proxy=None, proxy_auth=None, proxy_headers_hash=None)
        proto      = <aiohttp.client_proto.ResponseHandler object at 0x10b138ac0>
        protocol   = <aiohttp.client_proto.ResponseHandler object at 0x10b138ac0>
        proxy_req  = <aiohttp.client_reqrep.ClientRequest object at 0x10b12aa70>
        proxy_resp = <ClientResponse(https://127.0.0.1:50266) [200 Connection established]>
<CIMultiDictProxy()>

        req        = <aiohttp.client_reqrep.ClientRequest object at 0x108dbcfa0>
        resp       = <ClientResponse(https://127.0.0.1:50266) [200 Connection established]>
<CIMultiDictProxy()>

        runtime_has_start_tls = True
        self       = <aiohttp.connector.TCPConnector object at 0x108dbf7c0>
        timeout    = ClientTimeout(total=300, connect=None, sock_read=None, sock_connect=30, ceil_threshold=5)
        traces     = []
        transport  = <uvloop.loop._SSLProtocolTransport object at 0x10a922540>
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <aiohttp.connector.TCPConnector object at 0x108dbf7c0>
underlying_transport = <uvloop.loop._SSLProtocolTransport object at 0x10a922540>
req = <aiohttp.client_reqrep.ClientRequest object at 0x108dbcfa0>
timeout = ClientTimeout(total=300, connect=None, sock_read=None, sock_connect=30, ceil_threshold=5)
client_error = <class 'aiohttp.client_exceptions.ClientConnectorError'>

    #x1B[0m#x1B[94masync#x1B[39;49;00m #x1B[94mdef#x1B[39;49;00m#x1B[90m #x1B[39;49;00m#x1B[92m_start_tls_connection#x1B[39;49;00m(#x1B[90m#x1B[39;49;00m
        #x1B[96mself#x1B[39;49;00m,#x1B[90m#x1B[39;49;00m
        underlying_transport: asyncio.Transport,#x1B[90m#x1B[39;49;00m
        req: ClientRequest,#x1B[90m#x1B[39;49;00m
        timeout: #x1B[33m"#x1B[39;49;00m#x1B[33mClientTimeout#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m,#x1B[90m#x1B[39;49;00m
        client_error: #x1B[96mtype#x1B[39;49;00m[#x1B[96mException#x1B[39;49;00m] = ClientConnectorError,#x1B[90m#x1B[39;49;00m
    ) -> #x1B[96mtuple#x1B[39;49;00m[asyncio.BaseTransport, ResponseHandler]:#x1B[90m#x1B[39;49;00m
    #x1B[90m    #x1B[39;49;00m#x1B[33m"""Wrap the raw TCP transport with TLS."""#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
        tls_proto = #x1B[96mself#x1B[39;49;00m._factory()  #x1B[90m# Create a brand new proto for TLS#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
        sslcontext = #x1B[96mself#x1B[39;49;00m._get_ssl_context(req)#x1B[90m#x1B[39;49;00m
        #x1B[94mif#x1B[39;49;00m TYPE_CHECKING:#x1B[90m#x1B[39;49;00m
            #x1B[90m# _start_tls_connection is unreachable in the current code path#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
            #x1B[90m# if sslcontext is None.#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
            #x1B[94massert#x1B[39;49;00m sslcontext #x1B[95mis#x1B[39;49;00m #x1B[95mnot#x1B[39;49;00m #x1B[94mNone#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
    #x1B[90m#x1B[39;49;00m
        #x1B[94mtry#x1B[39;49;00m:#x1B[90m#x1B[39;49;00m
            #x1B[94masync#x1B[39;49;00m #x1B[94mwith#x1B[39;49;00m ceil_timeout(#x1B[90m#x1B[39;49;00m
                timeout.sock_connect, ceil_threshold=timeout.ceil_threshold#x1B[90m#x1B[39;49;00m
            ):#x1B[90m#x1B[39;49;00m
                #x1B[94mtry#x1B[39;49;00m:#x1B[90m#x1B[39;49;00m
                    #x1B[90m# ssl_shutdown_timeout is only available in Python 3.11+#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
                    #x1B[94mif#x1B[39;49;00m sys.version_info >= (#x1B[94m3#x1B[39;49;00m, #x1B[94m11#x1B[39;49;00m) #x1B[95mand#x1B[39;49;00m #x1B[96mself#x1B[39;49;00m._ssl_shutdown_timeout:#x1B[90m#x1B[39;49;00m
                        tls_transport = #x1B[94mawait#x1B[39;49;00m #x1B[96mself#x1B[39;49;00m._loop.start_tls(#x1B[90m#x1B[39;49;00m
                            underlying_transport,#x1B[90m#x1B[39;49;00m
                            tls_proto,#x1B[90m#x1B[39;49;00m
                            sslcontext,#x1B[90m#x1B[39;49;00m
                            server_hostname=req.server_hostname #x1B[95mor#x1B[39;49;00m req.host,#x1B[90m#x1B[39;49;00m
                            ssl_handshake_timeout=timeout.total,#x1B[90m#x1B[39;49;00m
                            ssl_shutdown_timeout=#x1B[96mself#x1B[39;49;00m._ssl_shutdown_timeout,#x1B[90m#x1B[39;49;00m
                        )#x1B[90m#x1B[39;49;00m
                    #x1B[94melse#x1B[39;49;00m:#x1B[90m#x1B[39;49;00m
                        tls_transport = #x1B[94mawait#x1B[39;49;00m #x1B[96mself#x1B[39;49;00m._loop.start_tls(#x1B[90m#x1B[39;49;00m
                            underlying_transport,#x1B[90m#x1B[39;49;00m
                            tls_proto,#x1B[90m#x1B[39;49;00m
                            sslcontext,#x1B[90m#x1B[39;49;00m
                            server_hostname=req.server_hostname #x1B[95mor#x1B[39;49;00m req.host,#x1B[90m#x1B[39;49;00m
                            ssl_handshake_timeout=timeout.total,#x1B[90m#x1B[39;49;00m
                        )#x1B[90m#x1B[39;49;00m
                #x1B[94mexcept#x1B[39;49;00m #x1B[96mBaseException#x1B[39;49;00m:#x1B[90m#x1B[39;49;00m
                    #x1B[90m# We need to close the underlying transport since#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
                    #x1B[90m# `start_tls()` probably failed before it had a#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
                    #x1B[90m# chance to do this:#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
                    #x1B[94mif#x1B[39;49;00m #x1B[96mself#x1B[39;49;00m._ssl_shutdown_timeout == #x1B[94m0#x1B[39;49;00m:#x1B[90m#x1B[39;49;00m
                        underlying_transport.abort()#x1B[90m#x1B[39;49;00m
                    #x1B[94melse#x1B[39;49;00m:#x1B[90m#x1B[39;49;00m
                        underlying_transport.close()#x1B[90m#x1B[39;49;00m
                    #x1B[94mraise#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
                #x1B[94mif#x1B[39;49;00m #x1B[96misinstance#x1B[39;49;00m(tls_transport, asyncio.Transport):#x1B[90m#x1B[39;49;00m
                    fingerprint = #x1B[96mself#x1B[39;49;00m._get_fingerprint(req)#x1B[90m#x1B[39;49;00m
                    #x1B[94mif#x1B[39;49;00m fingerprint:#x1B[90m#x1B[39;49;00m
                        #x1B[94mtry#x1B[39;49;00m:#x1B[90m#x1B[39;49;00m
                            fingerprint.check(tls_transport)#x1B[90m#x1B[39;49;00m
                        #x1B[94mexcept#x1B[39;49;00m ServerFingerprintMismatch:#x1B[90m#x1B[39;49;00m
                            tls_transport.close()#x1B[90m#x1B[39;49;00m
                            #x1B[94mif#x1B[39;49;00m #x1B[95mnot#x1B[39;49;00m #x1B[96mself#x1B[39;49;00m._cleanup_closed_disabled:#x1B[90m#x1B[39;49;00m
                                #x1B[96mself#x1B[39;49;00m._cleanup_closed_transports.append(tls_transport)#x1B[90m#x1B[39;49;00m
                            #x1B[94mraise#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
        #x1B[94mexcept#x1B[39;49;00m cert_errors #x1B[94mas#x1B[39;49;00m exc:#x1B[90m#x1B[39;49;00m
>           #x1B[94mraise#x1B[39;49;00m ClientConnectorCertificateError(req.connection_key, exc) #x1B[94mfrom#x1B[39;49;00m#x1B[90m #x1B[39;49;00m#x1B[04m#x1B[96mexc#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
#x1B[1m#x1B[31mE           aiohttp.client_exceptions.ClientConnectorCertificateError: Cannot connect to host example.com:443 ssl:True [SSLCertVerificationError: (1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1007)')]#x1B[0m

client_error = <class 'aiohttp.client_exceptions.ClientConnectorError'>
req        = <aiohttp.client_reqrep.ClientRequest object at 0x108dbcfa0>
self       = <aiohttp.connector.TCPConnector object at 0x108dbf7c0>
sslcontext = <ssl.SSLContext object at 0x10adfb940>
timeout    = ClientTimeout(total=300, connect=None, sock_read=None, sock_connect=30, ceil_threshold=5)
tls_proto  = <aiohttp.client_proto.ResponseHandler object at 0x10b138e20>
underlying_transport = <uvloop.loop._SSLProtocolTransport object at 0x10a922540>

#x1B[1m#x1B[31maiohttp/connector.py#x1B[0m:1470: ClientConnectorCertificateError

To view more test analytics, go to the Test Analytics Dashboard
📋 Got 3 mins? Take this short survey to help us improve Test Analytics.

@codspeed-hq
Copy link

codspeed-hq bot commented Feb 15, 2026

Merging this PR will not alter performance

✅ 59 untouched benchmarks


Comparing patchback/backports/3.14/3a39006da33970ac4b46256558ea2add7b4bd075/pr-12069 (c5a0dc2) with 3.14 (47d045d)

Open in CodSpeed

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

Comments