|
18 | 18 | let args: Vec<S> = args.into_iter().collect();
|
19 | 19 |
|
20 | 20 | if inputs.len() != args.len() {
|
21 |
| - eyre::bail!( |
22 |
| - "encode length mismatch: expected {} types, got {}", |
23 |
| - inputs.len(), |
24 |
| - args.len() |
25 |
| - ) |
| 21 | + eyre::bail!("encode length mismatch: expected {} types, got {}", inputs.len(), args.len()) |
26 | 22 | }
|
27 | 23 |
|
28 | 24 | std::iter::zip(inputs, args)
|
@@ -267,4 +263,43 @@ mod tests {
|
267 | 263 | assert_eq!(parsed.indexed[1], DynSolValue::Uint(U256::from_be_bytes([3; 32]), 256));
|
268 | 264 | assert_eq!(parsed.indexed[2], DynSolValue::Address(Address::from_word(param2)));
|
269 | 265 | }
|
| 266 | + |
| 267 | + #[test] |
| 268 | + fn test_encode_args_length_validation() { |
| 269 | + use alloy_json_abi::Param; |
| 270 | + |
| 271 | + let params = vec![ |
| 272 | + Param { |
| 273 | + name: "a".to_string(), |
| 274 | + ty: "uint256".to_string(), |
| 275 | + internal_type: None, |
| 276 | + components: vec![], |
| 277 | + }, |
| 278 | + Param { |
| 279 | + name: "b".to_string(), |
| 280 | + ty: "address".to_string(), |
| 281 | + internal_type: None, |
| 282 | + components: vec![], |
| 283 | + }, |
| 284 | + ]; |
| 285 | + |
| 286 | + // Less arguments than parameters |
| 287 | + let args = vec!["1"]; |
| 288 | + let res = encode_args(¶ms, &args); |
| 289 | + assert!(res.is_err()); |
| 290 | + assert!(format!("{}", res.unwrap_err()).contains("encode length mismatch")); |
| 291 | + |
| 292 | + // Exact number of arguments and parameters |
| 293 | + let args = vec!["1", "0x0000000000000000000000000000000000000001"]; |
| 294 | + let res = encode_args(¶ms, &args); |
| 295 | + assert!(res.is_ok()); |
| 296 | + let values = res.unwrap(); |
| 297 | + assert_eq!(values.len(), 2); |
| 298 | + |
| 299 | + // More arguments than parameters |
| 300 | + let args = vec!["1", "0x0000000000000000000000000000000000000001", "extra"]; |
| 301 | + let res = encode_args(¶ms, &args); |
| 302 | + assert!(res.is_err()); |
| 303 | + assert!(format!("{}", res.unwrap_err()).contains("encode length mismatch")); |
| 304 | + } |
270 | 305 | }
|
0 commit comments