mirror of
https://github.com/sigp/lighthouse.git
synced 2026-03-11 18:04:18 +00:00
Return correct variant for snappy errors (#8841)
N/A Handle snappy crate errors as InvalidData instead of IoError. Co-Authored-By: Pawan Dhananjay <pawandhananjay@gmail.com>
This commit is contained in:
@@ -457,6 +457,9 @@ fn handle_error<T>(
|
||||
Ok(None)
|
||||
}
|
||||
}
|
||||
// All snappy errors from the snap crate bubble up as `Other` kind errors
|
||||
// that imply invalid response
|
||||
ErrorKind::Other => Err(RPCError::InvalidData(err.to_string())),
|
||||
_ => Err(RPCError::from(err)),
|
||||
}
|
||||
}
|
||||
@@ -2317,4 +2320,43 @@ mod tests {
|
||||
RPCError::InvalidData(_)
|
||||
));
|
||||
}
|
||||
|
||||
/// Test invalid snappy response.
|
||||
#[test]
|
||||
fn test_invalid_snappy_response() {
|
||||
let spec = spec_with_all_forks_enabled();
|
||||
let fork_ctx = Arc::new(fork_context(ForkName::latest(), &spec));
|
||||
let max_packet_size = spec.max_payload_size as usize; // 10 MiB.
|
||||
|
||||
let protocol = ProtocolId::new(SupportedProtocol::BlocksByRangeV2, Encoding::SSZSnappy);
|
||||
|
||||
let mut codec = SSZSnappyOutboundCodec::<Spec>::new(
|
||||
protocol.clone(),
|
||||
max_packet_size,
|
||||
fork_ctx.clone(),
|
||||
);
|
||||
|
||||
let mut payload = BytesMut::new();
|
||||
payload.extend_from_slice(&[0u8]);
|
||||
let deneb_epoch = spec.deneb_fork_epoch.unwrap();
|
||||
payload.extend_from_slice(&fork_ctx.context_bytes(deneb_epoch));
|
||||
|
||||
// Claim the MAXIMUM allowed size (10 MiB)
|
||||
let claimed_size = max_packet_size;
|
||||
let mut uvi_codec: Uvi<usize> = Uvi::default();
|
||||
uvi_codec.encode(claimed_size, &mut payload).unwrap();
|
||||
payload.extend_from_slice(&[0xBB; 16]); // Junk snappy.
|
||||
|
||||
let result = codec.decode(&mut payload);
|
||||
|
||||
assert!(result.is_err(), "Expected decode to fail");
|
||||
|
||||
// IoError = reached snappy decode (allocation happened).
|
||||
let err = result.unwrap_err();
|
||||
assert!(
|
||||
matches!(err, RPCError::InvalidData(_)),
|
||||
"Should return invalid data variant {}",
|
||||
err
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user