Fix a crash processing TLS while a session is closing.

git-svn-id: https://www.unprompted.com/svn/projects/tildefriends/trunk@4715 ed5197a5-7fde-0310-b194-c3ffbd925b24
This commit is contained in:
Cory McWilliams 2023-12-31 03:05:52 +00:00
parent 6920504762
commit 797509fc11

View File

@ -712,7 +712,7 @@ static void _http_tls_update(tf_http_connection_t* connection)
{ {
again = false; again = false;
if (connection->is_handshaking) if (connection->is_handshaking && connection->tls)
{ {
switch (tf_tls_session_handshake(connection->tls)) switch (tf_tls_session_handshake(connection->tls))
{ {
@ -727,6 +727,9 @@ static void _http_tls_update(tf_http_connection_t* connection)
} }
} }
/* Maybe we became disconnected and cleaned up our TLS session. */
if (connection->tls)
{
char buffer[8192]; char buffer[8192];
int r = tf_tls_session_read_encrypted(connection->tls, buffer, sizeof(buffer)); int r = tf_tls_session_read_encrypted(connection->tls, buffer, sizeof(buffer));
if (r > 0) if (r > 0)
@ -734,14 +737,19 @@ static void _http_tls_update(tf_http_connection_t* connection)
_http_write_internal(connection, buffer, r); _http_write_internal(connection, buffer, r);
again = true; again = true;
} }
}
r = tf_tls_session_read_plain(connection->tls, buffer, sizeof(buffer)); if (connection->tls)
{
char buffer[8192];
int r = tf_tls_session_read_plain(connection->tls, buffer, sizeof(buffer));
if (r > 0) if (r > 0)
{ {
_http_on_read_plain(connection, buffer, r); _http_on_read_plain(connection, buffer, r);
again = true; again = true;
} }
} }
}
} }
static void _http_write(tf_http_connection_t* connection, const void* data, size_t size) static void _http_write(tf_http_connection_t* connection, const void* data, size_t size)