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:
parent
6920504762
commit
797509fc11
12
src/http.c
12
src/http.c
@ -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,8 +737,12 @@ 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);
|
||||||
@ -743,6 +750,7 @@ static void _http_tls_update(tf_http_connection_t* connection)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
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)
|
||||||
{
|
{
|
||||||
|
Loading…
Reference in New Issue
Block a user