Skip to content

Commit 2c14545

Browse files
committed
error handling for malicious keys
1 parent 5bcf071 commit 2c14545

File tree

1 file changed

+18
-5
lines changed

1 file changed

+18
-5
lines changed

crates/ethcore/src/engines/hbbft/contracts/keygen_history.rs

Lines changed: 18 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -156,12 +156,25 @@ pub fn acks_of_address(
156156
if serialized_ack.is_empty() {
157157
return Err(CallError::ReturnValueInvalid);
158158
}
159-
let deserialized_ack: Ack = bincode::deserialize(&serialized_ack).unwrap();
160-
let outcome = skg
161-
.handle_ack(vmap.get(&address).unwrap(), deserialized_ack)
162-
.unwrap();
159+
let deserialized_ack: Ack = match bincode::deserialize(&serialized_ack) {
160+
Ok(ack) => ack,
161+
Err(e) => {
162+
error!(target: "engine", "Failed to deserialize Ack #{} for address {}: {:?}", n, address, e);
163+
return Err(CallError::ReturnValueInvalid);
164+
}
165+
};
166+
167+
let outcome = match skg.handle_ack(vmap.get(&address).unwrap(), deserialized_ack) {
168+
Ok(s) => s,
169+
Err(e) => {
170+
error!(target: "engine", "Failed to handle Ack #{} for address {}: {:?}", n, address, e);
171+
return Err(CallError::ReturnValueInvalid);
172+
}
173+
};
174+
163175
if let AckOutcome::Invalid(fault) = outcome {
164-
panic!("Expected Ack Outcome to be valid. {:?}", fault);
176+
error!(target: "engine", "Invalid Ack Outcome for #{} for address {}: {:?}", n, address, fault);
177+
return Err(CallError::ReturnValueInvalid);
165178
}
166179
}
167180

0 commit comments

Comments
 (0)