Skip to content

Commit 44ff185

Browse files
authored
Merge pull request #74 from datachainlab/audit_BELC6
BELC6
2 parents 19d26e0 + 670c853 commit 44ff185

File tree

2 files changed

+28
-0
lines changed

2 files changed

+28
-0
lines changed

light-client/src/client.rs

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -165,6 +165,10 @@ impl InnerLightClient {
165165
let height = client_state.latest_height;
166166
let timestamp = consensus_state.timestamp;
167167

168+
if height.revision_height() == 0 {
169+
return Err(Error::UnexpectedRevisionHeight(height.revision_height()));
170+
}
171+
168172
Ok(CreateClientResult {
169173
height,
170174
message: UpdateStateProxyMessage {
@@ -590,6 +594,26 @@ mod test {
590594
_ => unreachable!("invalid commitment"),
591595
}
592596
}
597+
#[test]
598+
fn test_error_create_client() {
599+
let client_state = hex!("0a272f6962632e6c69676874636c69656e74732e7061726c69612e76312e436c69656e745374617465124d08381214151f3951fa218cac426edfe078fa9e5c6dcea5001a2000000000000000000000000000000000000000000000000000000000000000002205109b9ea90f2a040880a305320410c0843d").to_vec();
600+
let consensus_state = hex!("0a2a2f6962632e6c69676874636c69656e74732e7061726c69612e76312e436f6e73656e7375735374617465126c0a2056e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b42110de82d5a8061a209c59cf0b5717cb6e2bd8620b7f3481605c8abcd45636bdf45c86db06338f0c5e22207a1dede35f5c835fecdc768324928cd0d9d9161e8529e1ba1e60451f3a9d088a").to_vec();
601+
let client = ParliaLightClient::default();
602+
let mock_consensus_state = BTreeMap::new();
603+
let ctx = MockClientReader {
604+
client_state: None,
605+
consensus_state: mock_consensus_state,
606+
};
607+
let mut any_client_state: Any = client_state.try_into().unwrap();
608+
let mut client_state = ClientState::try_from(any_client_state.clone()).unwrap();
609+
client_state.latest_height = Height::new(0, 0);
610+
any_client_state = client_state.try_into().unwrap();
611+
let any_consensus_state: Any = consensus_state.try_into().unwrap();
612+
let result = client
613+
.create_client(&ctx, any_client_state.clone(), any_consensus_state.clone())
614+
.unwrap_err();
615+
assert_err(result, "UnexpectedRevisionHeight");
616+
}
593617

594618
#[rstest]
595619
#[case::localnet(localnet())]

light-client/src/errors.rs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ pub enum Error {
3232
UnexpectedCommitmentSlot(Vec<u8>),
3333
ClientFrozen(ClientId),
3434
UnexpectedProofHeight(Height, Height),
35+
UnexpectedRevisionHeight(u64),
3536

3637
// ConsensusState error
3738
AccountNotFound(Address),
@@ -376,6 +377,9 @@ impl core::fmt::Display for Error {
376377
e1, e2, e3, e4
377378
)
378379
}
380+
Error::UnexpectedRevisionHeight(e1) => {
381+
write!(f, "UnexpectedRevisionHeight : {}", e1)
382+
}
379383
}
380384
}
381385
}

0 commit comments

Comments
 (0)