Fix off-by-one max payload checks
This commit is contained in:
parent
c231bb7154
commit
f6cda2579f
|
@ -27,7 +27,7 @@ fn producer(addr: &SocketAddr, exit: Arc<AtomicBool>) -> JoinHandle<()> {
|
||||||
let mut num = 0;
|
let mut num = 0;
|
||||||
for p in &msgs.packets {
|
for p in &msgs.packets {
|
||||||
let a = p.meta.addr();
|
let a = p.meta.addr();
|
||||||
assert!(p.meta.size < PACKET_DATA_SIZE);
|
assert!(p.meta.size <= PACKET_DATA_SIZE);
|
||||||
send.send_to(&p.data[..p.meta.size], &a).unwrap();
|
send.send_to(&p.data[..p.meta.size], &a).unwrap();
|
||||||
num += 1;
|
num += 1;
|
||||||
}
|
}
|
||||||
|
|
|
@ -2466,7 +2466,7 @@ fn deserialize_bs58_transaction(bs58_transaction: String) -> Result<(Vec<u8>, Tr
|
||||||
let wire_transaction = bs58::decode(bs58_transaction)
|
let wire_transaction = bs58::decode(bs58_transaction)
|
||||||
.into_vec()
|
.into_vec()
|
||||||
.map_err(|e| Error::invalid_params(format!("{:?}", e)))?;
|
.map_err(|e| Error::invalid_params(format!("{:?}", e)))?;
|
||||||
if wire_transaction.len() >= PACKET_DATA_SIZE {
|
if wire_transaction.len() > PACKET_DATA_SIZE {
|
||||||
let err = format!(
|
let err = format!(
|
||||||
"transaction too large: {} bytes (max: {} bytes)",
|
"transaction too large: {} bytes (max: {} bytes)",
|
||||||
wire_transaction.len(),
|
wire_transaction.len(),
|
||||||
|
|
|
@ -219,7 +219,7 @@ pub fn request_airdrop_transaction(
|
||||||
Error::new(ErrorKind::Other, "Airdrop failed")
|
Error::new(ErrorKind::Other, "Airdrop failed")
|
||||||
})?;
|
})?;
|
||||||
let transaction_length = LittleEndian::read_u16(&buffer) as usize;
|
let transaction_length = LittleEndian::read_u16(&buffer) as usize;
|
||||||
if transaction_length >= PACKET_DATA_SIZE || transaction_length == 0 {
|
if transaction_length > PACKET_DATA_SIZE || transaction_length == 0 {
|
||||||
return Err(Error::new(
|
return Err(Error::new(
|
||||||
ErrorKind::Other,
|
ErrorKind::Other,
|
||||||
format!(
|
format!(
|
||||||
|
|
|
@ -598,7 +598,7 @@ mod tests {
|
||||||
tx0.message.instructions[0].data = vec![1, 2, 3];
|
tx0.message.instructions[0].data = vec![1, 2, 3];
|
||||||
let message0a = tx0.message_data();
|
let message0a = tx0.message_data();
|
||||||
let tx_bytes = serialize(&tx0).unwrap();
|
let tx_bytes = serialize(&tx0).unwrap();
|
||||||
assert!(tx_bytes.len() < PACKET_DATA_SIZE);
|
assert!(tx_bytes.len() <= PACKET_DATA_SIZE);
|
||||||
assert_eq!(
|
assert_eq!(
|
||||||
memfind(&tx_bytes, &tx0.signatures[0].as_ref()),
|
memfind(&tx_bytes, &tx0.signatures[0].as_ref()),
|
||||||
Some(SIG_OFFSET)
|
Some(SIG_OFFSET)
|
||||||
|
|
Loading…
Reference in New Issue