@@ -1109,6 +1109,47 @@ fn test_phantom_failure_too_low_cltv() {
11091109 expect_payment_failed_conditions ( & nodes[ 0 ] , payment_hash, true , fail_conditions) ;
11101110}
11111111
1112+ #[ test]
1113+ fn test_phantom_failure_modified_cltv ( ) {
1114+ // Test that we fail back phantoms if the upstream node fiddled with the CLTV too much with the
1115+ // correct error code.
1116+ let chanmon_cfgs = create_chanmon_cfgs ( 2 ) ;
1117+ let node_cfgs = create_node_cfgs ( 2 , & chanmon_cfgs) ;
1118+ let node_chanmgrs = create_node_chanmgrs ( 2 , & node_cfgs, & [ None , None ] ) ;
1119+ let nodes = create_network ( 2 , & node_cfgs, & node_chanmgrs) ;
1120+
1121+ let channel = create_announced_chan_between_nodes ( & nodes, 0 , 1 , channelmanager:: provided_init_features ( ) , channelmanager:: provided_init_features ( ) ) ;
1122+
1123+ // Get the route.
1124+ let recv_value_msat = 10_000 ;
1125+ let ( _, payment_hash, payment_secret) = get_payment_preimage_hash ! ( nodes[ 1 ] , Some ( recv_value_msat) ) ;
1126+ let ( mut route, phantom_scid) = get_phantom_route ! ( nodes, recv_value_msat, channel) ;
1127+
1128+ // Route the HTLC through to the destination.
1129+ nodes[ 0 ] . node . send_payment ( & route, payment_hash, & Some ( payment_secret) , PaymentId ( payment_hash. 0 ) ) . unwrap ( ) ;
1130+ check_added_monitors ! ( nodes[ 0 ] , 1 ) ;
1131+ let update_0 = get_htlc_update_msgs ! ( nodes[ 0 ] , nodes[ 1 ] . node. get_our_node_id( ) ) ;
1132+ let mut update_add = update_0. update_add_htlcs [ 0 ] . clone ( ) ;
1133+
1134+ // Modify the route to have a too-low cltv.
1135+ update_add. cltv_expiry -= 10 ;
1136+
1137+ nodes[ 1 ] . node . handle_update_add_htlc ( & nodes[ 0 ] . node . get_our_node_id ( ) , & update_add) ;
1138+ commitment_signed_dance ! ( nodes[ 1 ] , nodes[ 0 ] , & update_0. commitment_signed, false , true ) ;
1139+
1140+ let update_1 = get_htlc_update_msgs ! ( nodes[ 1 ] , nodes[ 0 ] . node. get_our_node_id( ) ) ;
1141+ assert ! ( update_1. update_fail_htlcs. len( ) == 1 ) ;
1142+ let fail_msg = update_1. update_fail_htlcs [ 0 ] . clone ( ) ;
1143+ nodes[ 0 ] . node . handle_update_fail_htlc ( & nodes[ 1 ] . node . get_our_node_id ( ) , & fail_msg) ;
1144+ commitment_signed_dance ! ( nodes[ 0 ] , nodes[ 1 ] , update_1. commitment_signed, false ) ;
1145+
1146+ // Ensure the payment fails with the expected error.
1147+ let mut fail_conditions = PaymentFailedConditions :: new ( )
1148+ . blamed_scid ( phantom_scid)
1149+ . expected_htlc_error_data ( 0x2000 | 2 , & [ ] ) ;
1150+ expect_payment_failed_conditions ( & nodes[ 0 ] , payment_hash, false , fail_conditions) ;
1151+ }
1152+
11121153#[ test]
11131154fn test_phantom_failure_too_low_recv_amt ( ) {
11141155 let chanmon_cfgs = create_chanmon_cfgs ( 2 ) ;
0 commit comments