Skip to content

Commit 19d26e0

Browse files
authored
Merge pull request #73 from datachainlab/audit_BELC3
BELC3 / BELC4
2 parents 78d1349 + 2b472ed commit 19d26e0

File tree

2 files changed

+24
-0
lines changed

2 files changed

+24
-0
lines changed

light-client/src/client_state.rs

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -159,6 +159,13 @@ impl TryFrom<RawClientState> for ClientState {
159159

160160
let chain_id = ChainId::new(value.chain_id);
161161

162+
if chain_id.version() != raw_latest_height.revision_number {
163+
return Err(Error::UnexpectedLatestHeightRevision(
164+
chain_id.version(),
165+
raw_latest_height.revision_number,
166+
));
167+
}
168+
162169
let latest_height = new_height(
163170
raw_latest_height.revision_number,
164171
raw_latest_height.revision_height,
@@ -489,6 +496,19 @@ mod test {
489496
err => unreachable!("{:?}", err),
490497
}
491498

499+
cs.latest_height = Some(Height {
500+
revision_number: 1,
501+
revision_height: 0,
502+
});
503+
let err = ClientState::try_from(cs.clone()).unwrap_err();
504+
match err {
505+
Error::UnexpectedLatestHeightRevision(e1, e2) => {
506+
assert_eq!(e1, 0);
507+
assert_eq!(e2, 1);
508+
}
509+
err => unreachable!("{:?}", err),
510+
}
511+
492512
cs.latest_height = Some(Height::default());
493513
let err = ClientState::try_from(cs.clone()).unwrap_err();
494514
match err {

light-client/src/errors.rs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,7 @@ pub enum Error {
6060
UnexpectedTrustedHeight(BlockNumber, BlockNumber),
6161
EmptyHeader,
6262
UnexpectedHeaderRevision(u64, u64),
63+
UnexpectedLatestHeightRevision(u64, u64),
6364
UnexpectedSignature(BlockNumber, signature::Error),
6465
MissingVanityInExtraData(BlockNumber, usize, usize),
6566
MissingSignatureInExtraData(BlockNumber, usize, usize),
@@ -163,6 +164,9 @@ impl core::fmt::Display for Error {
163164
Error::UnexpectedHeaderRevision(e1, e2) => {
164165
write!(f, "UnexpectedHeaderRevision: {} {}", e1, e2)
165166
}
167+
Error::UnexpectedLatestHeightRevision(e1, e2) => {
168+
write!(f, "UnexpectedLatestHeightRevision: {} {}", e1, e2)
169+
}
166170
Error::UnexpectedSignature(e1, e2) => write!(f, "UnexpectedSignature: {} {}", e1, e2),
167171
Error::MissingVanityInExtraData(e1, e2, e3) => {
168172
write!(f, "MissingVanityInExtraData: {} {} {}", e1, e2, e3)

0 commit comments

Comments
 (0)