+
+ if let Some(RecipientOnionFields { ref custom_tlvs, .. }) = payment.onion_fields {
+ if !custom_tlvs_known && custom_tlvs.iter().any(|(typ, _)| typ % 2 == 0) {
+ log_info!(self.logger, "Rejecting payment with payment hash {} as we cannot accept payment with unknown even TLVs: {}",
+ log_bytes!(payment_hash.0), log_iter!(custom_tlvs.iter().map(|(typ, _)| typ).filter(|typ| *typ % 2 == 0)));
+ claimable_payments.pending_claiming_payments.remove(&payment_hash);
+ mem::drop(claimable_payments);
+ for htlc in payment.htlcs {
+ let reason = self.get_htlc_fail_reason_from_failure_code(FailureCode::InvalidOnionPayload(None), &htlc);
+ let source = HTLCSource::PreviousHopData(htlc.prev_hop);
+ let receiver = HTLCDestination::FailedPayment { payment_hash };
+ self.fail_htlc_backwards_internal(&source, &payment_hash, &reason, receiver);
+ }
+ return;
+ }
+ }
+