@@ -726,6 +726,17 @@ def _reset_tls_connection(port, cafile):
726726 raw_sock .close ()
727727
728728
729+ def _send_corrupted_tls_record (port , cafile ):
730+ raw_sock , tls , outgoing = _create_tls_memory_bio_client (port , cafile )
731+
732+ tls .write (b"\x91 " )
733+ wire_payload = bytearray (outgoing .read ())
734+ wire_payload [- 1 ] ^= 1
735+ raw_sock .sendall (wire_payload )
736+
737+ return raw_sock
738+
739+
729740def _create_partial_forward_client (service , payload , use_tls ):
730741 if use_tls :
731742 sock , tls , outgoing = _create_tls_memory_bio_client (
@@ -1458,6 +1469,36 @@ def test_in_forward_tls_syscall_error_preserves_errno():
14581469 assert records [0 ]["message" ] == "after-tls-reset"
14591470
14601471
1472+ def test_in_forward_tls_protocol_error_is_reported ():
1473+ service = Service ("in_forward_tls.yaml" )
1474+ protocol_sock = None
1475+ service .start ()
1476+
1477+ try :
1478+ protocol_sock = _send_corrupted_tls_record (
1479+ service .flb_listener_port ,
1480+ service .tls_crt_file ,
1481+ )
1482+ log_text = service .wait_for_log_contains ("[tls] error:" , timeout = 10 )
1483+ protocol_sock .close ()
1484+ protocol_sock = None
1485+
1486+ payload = _message_mode_payload (
1487+ TEST_TAG ,
1488+ {"message" : "after-tls-protocol-error" },
1489+ )
1490+ _send_forward_payload (service , payload , True )
1491+ records = service .wait_for_record_count (1 , timeout = 10 )
1492+ finally :
1493+ if protocol_sock is not None :
1494+ protocol_sock .close ()
1495+ service .stop ()
1496+
1497+ assert "bad record mac" in log_text .lower ()
1498+ assert "unknown error" not in log_text
1499+ assert records [0 ]["message" ] == "after-tls-protocol-error"
1500+
1501+
14611502@pytest .mark .parametrize (
14621503 "config_file,use_tls" ,
14631504 [
0 commit comments