@@ -593,6 +593,10 @@ pub enum Bolt11PaymentError {
593593 /// [`Bolt11Invoice`]: lightning_invoice::Bolt11Invoice
594594 /// [`ChannelManager::pay_for_bolt11_invoice`]: crate::ln::channelmanager::ChannelManager::pay_for_bolt11_invoice
595595 InvalidAmount ,
596+ /// An invalid or incompatible invoice was provided to [`ChannelManager::pay_for_bolt11_invoice`].
597+ ///
598+ /// [`ChannelManager::pay_for_bolt11_invoice`]: crate::ln::channelmanager::ChannelManager::pay_for_bolt11_invoice
599+ InvalidInvoice ,
596600 /// The invoice was valid for the corresponding [`PaymentId`], but sending the payment failed.
597601 SendingFailed ( RetryableSendFailure ) ,
598602}
@@ -604,7 +608,13 @@ pub enum Bolt12PaymentError {
604608 UnexpectedInvoice ,
605609 /// Payment for an invoice with the corresponding [`PaymentId`] was already initiated.
606610 DuplicateInvoice ,
611+ /// An invalid or incompatible invoice was provided to [`ChannelManager`].
612+ ///
613+ /// [`ChannelManager`]: crate::ln::channelmanager::ChannelManager
614+ InvalidInvoice ,
607615 /// The invoice was valid for the corresponding [`PaymentId`], but required unknown features.
616+ ///
617+ /// [`ChannelManager::pay_for_bolt12_invoice`]: crate::ln::channelmanager::ChannelManager::pay_for_bolt12_invoice
608618 UnknownRequiredFeatures ,
609619 /// The invoice was valid for the corresponding [`PaymentId`], but sending the payment failed.
610620 SendingFailed ( RetryableSendFailure ) ,
@@ -902,6 +912,7 @@ impl OutboundPayments {
902912 recipient_onion. payment_metadata = invoice. payment_metadata ( ) . map ( |v| v. clone ( ) ) ;
903913
904914 let payment_params = PaymentParameters :: from_bolt11_invoice ( invoice)
915+ . map_err ( |_| Bolt11PaymentError :: InvalidInvoice ) ?
905916 . with_user_config_ignoring_fee_limit ( route_params_config) ;
906917
907918 let mut route_params = RouteParameters :: from_payment_params_and_value ( payment_params, amount) ;
@@ -949,6 +960,7 @@ impl OutboundPayments {
949960
950961 let mut route_params = RouteParameters :: from_payment_params_and_value (
951962 PaymentParameters :: from_bolt12_invoice ( & invoice)
963+ . map_err ( |_| Bolt12PaymentError :: InvalidInvoice ) ?
952964 . with_user_config_ignoring_fee_limit ( params_config) , invoice. amount_msats ( )
953965 ) ;
954966 if let Some ( max_fee_msat) = params_config. max_total_routing_fee_msat {
@@ -1127,6 +1139,7 @@ impl OutboundPayments {
11271139 let keysend_preimage = PaymentPreimage ( entropy_source. get_secure_random_bytes ( ) ) ;
11281140 let payment_hash = PaymentHash ( Sha256 :: hash ( & keysend_preimage. 0 ) . to_byte_array ( ) ) ;
11291141 let pay_params = PaymentParameters :: from_static_invoice ( invoice)
1142+ . map_err ( |_| Bolt12PaymentError :: InvalidInvoice ) ?
11301143 . with_user_config_ignoring_fee_limit ( * route_params_config) ;
11311144 let mut route_params = RouteParameters :: from_payment_params_and_value ( pay_params, amount_msat) ;
11321145 route_params. max_total_routing_fee_msat = route_params_config. max_total_routing_fee_msat ;
@@ -3034,7 +3047,7 @@ mod tests {
30343047 assert ! ( outbound_payments. has_pending_payments( ) ) ;
30353048
30363049 let route_params = RouteParameters :: from_payment_params_and_value (
3037- PaymentParameters :: from_bolt12_invoice ( & invoice) ,
3050+ PaymentParameters :: from_bolt12_invoice ( & invoice) . unwrap ( ) ,
30383051 invoice. amount_msats ( ) ,
30393052 ) ;
30403053 router. expect_find_route ( route_params, Err ( "" ) ) ;
@@ -3086,7 +3099,7 @@ mod tests {
30863099 . sign ( recipient_sign) . unwrap ( ) ;
30873100
30883101 let route_params = RouteParameters {
3089- payment_params : PaymentParameters :: from_bolt12_invoice ( & invoice) ,
3102+ payment_params : PaymentParameters :: from_bolt12_invoice ( & invoice) . unwrap ( ) ,
30903103 final_value_msat : invoice. amount_msats ( ) ,
30913104 max_total_routing_fee_msat : Some ( 1234 ) ,
30923105 } ;
0 commit comments