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)); + } +}