From a3a731ed92aec7a7a99b369d84d9f11fcbec5642 Mon Sep 17 00:00:00 2001 From: Pedro Rodrigues Date: Mon, 1 Mar 2021 21:38:16 +0000 Subject: [PATCH] Fix crash on HTTPClient::poll method The problem happened because `poll` assumed that when the SSL flag was true, the `connection` would be a subclass of StreamPeerSSL. However that invariant could be broken by calling HTTPClient::set_connection with a `connection` that is not a subclass of StreamPeerSSL. Fixes #46138 --- core/io/http_client.cpp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/core/io/http_client.cpp b/core/io/http_client.cpp index 18afdc678e4..3863dce0f6f 100644 --- a/core/io/http_client.cpp +++ b/core/io/http_client.cpp @@ -96,6 +96,11 @@ Error HTTPClient::connect_to_host(const String &p_host, int p_port, bool p_ssl, void HTTPClient::set_connection(const Ref &p_connection) { ERR_FAIL_COND_MSG(p_connection.is_null(), "Connection is not a reference to a valid StreamPeer object."); + if (ssl) { + ERR_FAIL_NULL_MSG(Object::cast_to(p_connection.ptr()), + "Connection is not a reference to a valid StreamPeerSSL object."); + } + if (connection == p_connection) { return; }