Skip to content

Commit

Permalink
Use try_reserve instead of with_capacity to handle error
Browse files Browse the repository at this point in the history
  • Loading branch information
jordy25519 committed Apr 13, 2023
1 parent 23a0f85 commit fa299d8
Showing 1 changed file with 23 additions and 23 deletions.
46 changes: 23 additions & 23 deletions ethabi/src/decoder.rs
Original file line number Diff line number Diff line change
Expand Up @@ -48,17 +48,16 @@ fn decode_impl(types: &[ParamType], data: &[u8], validate: bool) -> Result<(Vec<
));
}

let mut offset = 0;
let mut tokens = vec![];
tokens.try_reserve_exact(types.len()).map_err(|_| Error::InvalidData)?;

let tokens = types
.iter()
.map(|param| {
let res = decode_param(param, data, offset, validate)?;
offset = res.new_offset;
Ok(res.token)
})
.collect::<Result<Vec<Token>, Error>>()?;
let mut offset = 0;

for param in types {
let res = decode_param(param, data, offset, validate)?;
offset = res.new_offset;
tokens.push(res.token);
}
if validate && offset != data.len() {
return Err(Error::InvalidData);
}
Expand Down Expand Up @@ -180,15 +179,15 @@ fn decode_param(param: &ParamType, data: &[u8], offset: usize, validate: bool) -
let tail_offset = len_offset + 32;
let tail = &data[tail_offset..];

let mut tokens = vec![];
tokens.try_reserve_exact(len).map_err(|_| Error::InvalidData)?;
let mut new_offset = 0;

let tokens = (0..len)
.map(|_| {
let res = decode_param(t, tail, new_offset, validate)?;
new_offset = res.new_offset;
Ok(res.token)
})
.collect::<Result<Vec<Token>, Error>>()?;
for _ in 0..len {
let res = decode_param(t, tail, new_offset, validate)?;
new_offset = res.new_offset;
tokens.push(res.token);
}

let result = DecodeResult { token: Token::Array(tokens), new_offset: offset + 32 };

Expand All @@ -207,13 +206,14 @@ fn decode_param(param: &ParamType, data: &[u8], offset: usize, validate: bool) -
(data, offset)
};

let tokens = (0..len)
.map(|_| {
let res = decode_param(t, tail, new_offset, validate)?;
new_offset = res.new_offset;
Ok(res.token)
})
.collect::<Result<Vec<Token>, Error>>()?;
let mut tokens = vec![];
tokens.try_reserve_exact(len).map_err(|_| Error::InvalidData)?;

for _ in 0..len {
let res = decode_param(t, tail, new_offset, validate)?;
new_offset = res.new_offset;
tokens.push(res.token);
}

let result = DecodeResult {
token: Token::FixedArray(tokens),
Expand Down

0 comments on commit fa299d8

Please sign in to comment.