Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 0 additions & 2 deletions lib/bytecode_verification/parse_json.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1424,8 +1424,6 @@ impl ProjectInfo {
build_cache: Option<&String>,
libraries: Option<Vec<String>>,
) -> Result<Self, ValidationError> {
println!("Libraries are {:?}", libraries);

let build_info_path: PathBuf = match build_cache {
Some(s) => PathBuf::from(s),
None => Self::compile(project, env, artifacts_path, libraries)?,
Expand Down
2 changes: 1 addition & 1 deletion lib/state/contract_state.rs
Original file line number Diff line number Diff line change
Expand Up @@ -207,7 +207,7 @@ impl<'a> ContractState<'a> {
)
);
// Look for mapping usages
if length_in_bytes > U256::from(32_u64)
if length_in_bytes >= U256::from(32_u64)
&& length_in_bytes < U256::from(usize::MAX / 2)
{
let usize_str_length =
Expand Down
18 changes: 13 additions & 5 deletions lib/web3.rs
Original file line number Diff line number Diff line change
Expand Up @@ -31,14 +31,22 @@ const NUM_STORAGE_QUERIES: u64 = 32;
const LARGE_BLOCK_RANGE: u64 = 100000;

mod pathological_rpc_deserde {
use serde::{self, Deserialize};
use serde::{de::Error, Deserialize};

pub fn deserialize<'de, D>(deserializer: D) -> Result<u64, D::Error>
where
D: super::Deserializer<'de>,
D: serde::Deserializer<'de>,
{
let s = String::deserialize(deserializer)?;
u64::from_str_radix(s.trim_start_matches("0x"), 16).map_err(serde::de::Error::custom)
let value = serde_json::Value::deserialize(deserializer)?;
match value {
serde_json::Value::Number(n) => {
n.as_u64().ok_or_else(|| Error::custom("Invalid number"))
}
serde_json::Value::String(s) => {
u64::from_str_radix(s.trim_start_matches("0x"), 16).map_err(Error::custom)
}
_ => Err(Error::custom("Expected a hex string or integer")),
}
}
}

Expand Down Expand Up @@ -1821,7 +1829,7 @@ impl StorageSnapshot {
}
}

// Collect all storage slots that have not previously been queried
// Collect all storage slots that have not been queried previously
pub fn get_unused_nonzero_storage_slots(&self) -> Vec<UnusedStoragePart> {
let mut unused_storage_parts: Vec<UnusedStoragePart> = vec![];

Expand Down
1 change: 1 addition & 0 deletions src/gentest.rs
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,7 @@ fn main() {
Arg::new("chainid")
.long("chainid")
.help("Chain ID")
.value_parser(clap::value_parser!(u64))
.action(ArgAction::Set),
)
.get_matches();
Expand Down
1 change: 1 addition & 0 deletions tests/Contracts/src/BytesMapping.sol
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ contract BytesMapping {
x[bytes("Hello this is a test")] = 5;
x[bytes("A veryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryvery long string")] = 42;
b = bytes("Just some normal bytes.");
x[bytes("")] = 42;
}

function f() external {
Expand Down
1 change: 1 addition & 0 deletions tests/Contracts/src/StringMapping.sol
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ contract StringMapping {
x["A veryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryvery long string"] = 42;
y["abc"] = "a short string";
y["a"] = "A veryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryvery long string.";
x[""] = 42;
emit SomeE("EventData", 1000);
}

Expand Down
27 changes: 18 additions & 9 deletions tests/data/result_BytesMapping.json
Original file line number Diff line number Diff line change
@@ -1,4 +1,22 @@
[
{
"slot": "0x1",
"offset": 0,
"var_name": "b (length=23)",
"var_type": "t_bytes_storage",
"value": "0x4a75737420736f6d65206e6f726d616c2062797465732e00000000000000002e",
"value_hint": "4a75737420736f6d65206e6f726d616c2062797465732e",
"comparison_operator": "Equal"
},
{
"slot": "0x290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563",
"offset": 0,
"var_name": "x[0x]",
"var_type": "t_uint256",
"value": "0x000000000000000000000000000000000000000000000000000000000000002a",
"value_hint": "42",
"comparison_operator": "Equal"
},
{
"slot": "0x4a8918e67ba0b26637797e1472ee3d675d66efda39253f7139f8eabc58b20ffb",
"offset": 0,
Expand All @@ -16,14 +34,5 @@
"value": "0x0000000000000000000000000000000000000000000000000000000000000005",
"value_hint": "5",
"comparison_operator": "Equal"
},
{
"slot": "0x1",
"offset": 0,
"var_name": "b (length=23)",
"var_type": "t_bytes_storage",
"value": "0x4a75737420736f6d65206e6f726d616c2062797465732e00000000000000002e",
"value_hint": "4a75737420736f6d65206e6f726d616c2062797465732e",
"comparison_operator": "Equal"
}
]
49 changes: 29 additions & 20 deletions tests/data/result_StringMapping.json
Original file line number Diff line number Diff line change
@@ -1,31 +1,13 @@
[
{
"slot": "0x4a8918e67ba0b26637797e1472ee3d675d66efda39253f7139f8eabc58b20ffb",
"slot": "0x290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563",
"offset": 0,
"var_name": "x[A veryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryvery long string]",
"var_name": "x[]",
"var_type": "t_uint256",
"value": "0x000000000000000000000000000000000000000000000000000000000000002a",
"value_hint": "42",
"comparison_operator": "Equal"
},
{
"slot": "0x5585ade74713b5d6d915d0f40534bd55231ae0a540289299fb117ed2c74ca466",
"offset": 0,
"var_name": "x[Hello this is a test]",
"var_type": "t_uint256",
"value": "0x0000000000000000000000000000000000000000000000000000000000000005",
"value_hint": "5",
"comparison_operator": "Equal"
},
{
"slot": "0xb5cafab5b83d18303877bb912b2d66ca18ab7390cfd9be8a2e66cc5096e0ea02",
"offset": 0,
"var_name": "y[a].length",
"var_type": "t_uint256",
"value": "0x00000000000000000000000000000000000000000000000000000000000000a7",
"value_hint": "167",
"comparison_operator": "Equal"
},
{
"slot": "0x2fccf76901d0aa8dbb54cf0f8d3d8db6b27e630b57020bc913d21efd33831cbc",
"offset": 0,
Expand Down Expand Up @@ -53,6 +35,24 @@
"value_hint": "ryvery long string.",
"comparison_operator": "Equal"
},
{
"slot": "0x4a8918e67ba0b26637797e1472ee3d675d66efda39253f7139f8eabc58b20ffb",
"offset": 0,
"var_name": "x[A veryveryveryveryveryveryveryveryveryveryveryveryveryveryveryveryvery long string]",
"var_type": "t_uint256",
"value": "0x000000000000000000000000000000000000000000000000000000000000002a",
"value_hint": "42",
"comparison_operator": "Equal"
},
{
"slot": "0x5585ade74713b5d6d915d0f40534bd55231ae0a540289299fb117ed2c74ca466",
"offset": 0,
"var_name": "x[Hello this is a test]",
"var_type": "t_uint256",
"value": "0x0000000000000000000000000000000000000000000000000000000000000005",
"value_hint": "5",
"comparison_operator": "Equal"
},
{
"slot": "0xac85c8cc1ac92e94a731b8df588044cbfd366c5ee08805d198cb1b094f3cacac",
"offset": 0,
Expand All @@ -61,5 +61,14 @@
"value": "0x612073686f727420737472696e6700000000000000000000000000000000001c",
"value_hint": "a short string",
"comparison_operator": "Equal"
},
{
"slot": "0xb5cafab5b83d18303877bb912b2d66ca18ab7390cfd9be8a2e66cc5096e0ea02",
"offset": 0,
"var_name": "y[a].length",
"var_type": "t_uint256",
"value": "0x00000000000000000000000000000000000000000000000000000000000000a7",
"value_hint": "167",
"comparison_operator": "Equal"
}
]
Loading
Loading