Skip to content

Commit 79e121b

Browse files
committed
add length check
1 parent e7575d1 commit 79e121b

File tree

1 file changed

+15
-4
lines changed

1 file changed

+15
-4
lines changed

runtime/src/precompiles/neuron.rs

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -194,14 +194,14 @@ impl NeuronPrecompile {
194194
fn parse_serve_axon_tls_parameters(
195195
data: &[u8],
196196
) -> Result<(u16, u32, u128, u16, u8, u8, u8, u8, vec::Vec<u8>), PrecompileFailure> {
197-
if data.len() < 288 {
197+
let data_len = data.len();
198+
if data_len < 288 {
198199
return Err(PrecompileFailure::Error {
199200
exit_status: ExitError::InvalidRange,
200201
});
201202
}
202-
let mut netuid_vec = [0u8; 2];
203-
netuid_vec.copy_from_slice(get_slice(data, 30, 32)?);
204-
let netuid = u16::from_be_bytes(netuid_vec);
203+
204+
let netuid = parse_netuid(data, 30)?;
205205

206206
let mut version_vec = [0u8; 4];
207207
version_vec.copy_from_slice(get_slice(data, 60, 64)?);
@@ -224,6 +224,17 @@ impl NeuronPrecompile {
224224
len_position_vec.copy_from_slice(get_slice(data, 286, 288)?);
225225
let len_position = u16::from_be_bytes(len_position_vec) as usize;
226226

227+
if len_position > data_len {
228+
log::error!(
229+
"the start position of certificate as {} is bigger than whole data len {}",
230+
subnet_contact_start,
231+
data_len
232+
);
233+
return Err(PrecompileFailure::Error {
234+
exit_status: ExitError::InvalidRange,
235+
});
236+
}
237+
227238
let mut len_vec = [0u8; 2];
228239
len_vec.copy_from_slice(get_slice(data, len_position + 30, len_position + 32)?);
229240
let vec_len = u16::from_be_bytes(len_vec) as usize;

0 commit comments

Comments
 (0)