Skip to content
This repository was archived by the owner on Jan 6, 2025. It is now read-only.

Commit fba2499

Browse files
committed
Ensure we disconnect on parse failure
1 parent 99b2960 commit fba2499

File tree

1 file changed

+12
-9
lines changed

1 file changed

+12
-9
lines changed

src/manager.rs

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -22,9 +22,10 @@ use crate::sync::{Arc, Mutex, RwLock};
2222
use lightning::chain::{self, BestBlock, Confirm, Filter, Listen};
2323
use lightning::ln::channelmanager::{AChannelManager, ChainParameters};
2424
use lightning::ln::features::{InitFeatures, NodeFeatures};
25-
use lightning::ln::msgs::{ErrorAction, LightningError};
25+
use lightning::ln::msgs::{ErrorAction, ErrorMessage, LightningError};
2626
use lightning::ln::peer_handler::CustomMessageHandler;
2727
use lightning::ln::wire::CustomMessageReader;
28+
use lightning::ln::ChannelId;
2829
use lightning::sign::EntropySource;
2930
use lightning::util::logger::Level;
3031
use lightning::util::ser::Readable;
@@ -416,16 +417,18 @@ where
416417
) -> Result<(), lightning::ln::msgs::LightningError> {
417418
let message = {
418419
let mut request_id_to_method_map = self.request_id_to_method_map.lock().unwrap();
419-
LSPSMessage::from_str_with_id_map(&msg.payload, &mut request_id_to_method_map)
420+
LSPSMessage::from_str_with_id_map(&msg.payload, &mut request_id_to_method_map).map_err(
421+
|_| {
422+
self.pending_messages.enqueue(sender_node_id, LSPSMessage::Invalid);
423+
let err = format!("Failed to deserialize invalid LSPS message.");
424+
let err_msg =
425+
Some(ErrorMessage { channel_id: ChannelId([0; 32]), data: err.clone() });
426+
LightningError { err, action: ErrorAction::DisconnectPeer { msg: err_msg } }
427+
},
428+
)?
420429
};
421430

422-
match message {
423-
Ok(msg) => self.handle_lsps_message(msg, sender_node_id),
424-
Err(_) => {
425-
self.pending_messages.enqueue(sender_node_id, LSPSMessage::Invalid);
426-
Ok(())
427-
}
428-
}
431+
self.handle_lsps_message(message, sender_node_id)
429432
}
430433

431434
fn get_and_clear_pending_msg(&self) -> Vec<(PublicKey, Self::CustomMessage)> {

0 commit comments

Comments
 (0)