fix: consider empty headers response edge case (#1180)

This commit is contained in:
Matthias Seitz
2023-02-06 11:28:59 +01:00
committed by GitHub
parent 952ec83aed
commit 705d9fcc82

View File

@ -31,7 +31,10 @@ impl EthResponseValidator for RequestResult<Vec<Header>> {
}
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<Header> = vec![];
assert!(!Ok(headers).is_likely_bad_headers_response(&request));
let request =
HeadersRequest { start: 0u64.into(), limit: 1, direction: Default::default() };
let headers: Vec<Header> = vec![];
assert!(Ok(headers).is_likely_bad_headers_response(&request));
}
}