diff --git a/polkadot/runtime/parachains/src/inclusion/mod.rs b/polkadot/runtime/parachains/src/inclusion/mod.rs index 8ad9711a0f388..387a55831550c 100644 --- a/polkadot/runtime/parachains/src/inclusion/mod.rs +++ b/polkadot/runtime/parachains/src/inclusion/mod.rs @@ -1306,19 +1306,23 @@ impl CandidateCheckContext { hrmp_watermark: BlockNumberFor, horizontal_messages: &[polkadot_primitives::OutboundHrmpMessage], ) -> Result<(), AcceptanceCheckErr> { - ensure!( - head_data.0.len() <= self.config.max_head_data_size as _, - AcceptanceCheckErr::HeadDataTooLarge, - ); + // Safe convertions when `self.config.max_head_data_size` is in bounds of `usize` type. + let max_head_data_size = usize::try_from(self.config.max_head_data_size) + .map_err(|_| AcceptanceCheckErr::HeadDataTooLarge)?; + ensure!(head_data.0.len() <= max_head_data_size, AcceptanceCheckErr::HeadDataTooLarge); // if any, the code upgrade attempt is allowed. if let Some(new_validation_code) = new_validation_code { + // Safe convertions when `self.config.max_code_size` is in bounds of `usize` type. + let max_code_size = usize::try_from(self.config.max_code_size) + .map_err(|_| AcceptanceCheckErr::NewCodeTooLarge)?; + ensure!( paras::Pallet::::can_upgrade_validation_code(para_id), AcceptanceCheckErr::PrematureCodeUpgrade, ); ensure!( - new_validation_code.0.len() <= self.config.max_code_size as _, + new_validation_code.0.len() <= max_code_size, AcceptanceCheckErr::NewCodeTooLarge, ); } diff --git a/prdoc/pr_8118.prdoc b/prdoc/pr_8118.prdoc new file mode 100644 index 0000000000000..ae997635d7da1 --- /dev/null +++ b/prdoc/pr_8118.prdoc @@ -0,0 +1,8 @@ +title: Safer conversions in polkadot-runtime-parachains +doc: +- audience: Runtime Dev + description: |- + Use TryFrom impls instead of `as` operator for conversions. +crates: +- name: polkadot-runtime-parachains + bump: patch