forked from cory/tildefriends
		
	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:
		
							
								
								
									
										28
									
								
								src/http.c
									
									
									
									
									
								
							
							
						
						
									
										28
									
								
								src/http.c
									
									
									
									
									
								
							| @@ -712,7 +712,7 @@ static void _http_tls_update(tf_http_connection_t* connection) | ||||
| 	{ | ||||
| 		again = false; | ||||
|  | ||||
| 		if (connection->is_handshaking) | ||||
| 		if (connection->is_handshaking && connection->tls) | ||||
| 		{ | ||||
| 			switch (tf_tls_session_handshake(connection->tls)) | ||||
| 			{ | ||||
| @@ -727,19 +727,27 @@ static void _http_tls_update(tf_http_connection_t* connection) | ||||
| 			} | ||||
| 		} | ||||
|  | ||||
| 		char buffer[8192]; | ||||
| 		int r = tf_tls_session_read_encrypted(connection->tls, buffer, sizeof(buffer)); | ||||
| 		if (r > 0) | ||||
| 		/* Maybe we became disconnected and cleaned up our TLS session. */ | ||||
| 		if (connection->tls) | ||||
| 		{ | ||||
| 			_http_write_internal(connection, buffer, r); | ||||
| 			again = true; | ||||
| 			char buffer[8192]; | ||||
| 			int r = tf_tls_session_read_encrypted(connection->tls, buffer, sizeof(buffer)); | ||||
| 			if (r > 0) | ||||
| 			{ | ||||
| 				_http_write_internal(connection, buffer, r); | ||||
| 				again = true; | ||||
| 			} | ||||
| 		} | ||||
|  | ||||
| 		r = tf_tls_session_read_plain(connection->tls, buffer, sizeof(buffer)); | ||||
| 		if (r > 0) | ||||
| 		if (connection->tls) | ||||
| 		{ | ||||
| 			_http_on_read_plain(connection, buffer, r); | ||||
| 			again = true; | ||||
| 			char buffer[8192]; | ||||
| 			int r = tf_tls_session_read_plain(connection->tls, buffer, sizeof(buffer)); | ||||
| 			if (r > 0) | ||||
| 			{ | ||||
| 				_http_on_read_plain(connection, buffer, r); | ||||
| 				again = true; | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user