From 705d9fcc824e2198da435a9254fe7230117dd1d8 Mon Sep 17 00:00:00 2001 From: Matthias Seitz Date: Mon, 6 Feb 2023 11:28:59 +0100 Subject: [PATCH] fix: consider empty headers response edge case (#1180) --- crates/interfaces/src/p2p/error.rs | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/crates/interfaces/src/p2p/error.rs b/crates/interfaces/src/p2p/error.rs index 573e60efe6..e7b18e6e18 100644 --- a/crates/interfaces/src/p2p/error.rs +++ b/crates/interfaces/src/p2p/error.rs @@ -31,7 +31,10 @@ impl EthResponseValidator for RequestResult> { } match request.start { - BlockHashOrNumber::Number(block_number) => block_number != headers[0].number, + BlockHashOrNumber::Number(block_number) => headers + .first() + .map(|header| block_number != header.number) + .unwrap_or_default(), BlockHashOrNumber::Hash(_) => { // we don't want to hash the header false @@ -198,3 +201,21 @@ pub enum DownloadError { #[error(transparent)] DatabaseError(#[from] db::Error), } + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn test_is_likely_bad_headers_response() { + let request = + HeadersRequest { start: 0u64.into(), limit: 0, direction: Default::default() }; + let headers: Vec
= vec![]; + assert!(!Ok(headers).is_likely_bad_headers_response(&request)); + + let request = + HeadersRequest { start: 0u64.into(), limit: 1, direction: Default::default() }; + let headers: Vec
= vec![]; + assert!(Ok(headers).is_likely_bad_headers_response(&request)); + } +}