Skip to content

Commit a9b46a9

Browse files
committed
Continue fixing tests for Rust > v1.61
Not sure if Rust v1.61 exactly, but somewhere between v1.62 and v1.67 they added stuff which optimized away some of our tests the perform memory/pointer manipulations.
1 parent 06494da commit a9b46a9

File tree

20 files changed

+86
-75
lines changed

20 files changed

+86
-75
lines changed

.gitignore

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,4 +44,4 @@ third_party/build
4444
x/compute/internal/keeper/testdata/test-contract/target
4545
x/compute/internal/keeper/testdata/v1-sanity-contract/target
4646
build
47-
check-hw/target
47+
check-hw/target

Makefile

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -242,6 +242,10 @@ clean:
242242
$(MAKE) -C go-cosmwasm clean-all
243243
$(MAKE) -C cosmwasm/enclaves/test clean
244244
$(MAKE) -C check-hw clean
245+
$(MAKE) -C $(TEST_CONTRACT_V010_PATH)/test-compute-contract clean
246+
$(MAKE) -C $(TEST_CONTRACT_V010_PATH)/test-compute-contract-v2 clean
247+
$(MAKE) -C $(TEST_CONTRACT_V1_PATH)/test-compute-contract clean
248+
$(MAKE) -C $(TEST_CONTRACT_V1_PATH)/test-compute-contract-v2 clean
245249

246250
localsecret:
247251
DOCKER_BUILDKIT=1 docker build \

cosmwasm/contracts/v010/compute-tests/test-compute-contract-v2/src/contract.rs

Lines changed: 17 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,19 @@
11
use cosmwasm_storage::{PrefixedStorage, ReadonlySingleton, Singleton};
22

33
use cosmwasm_std::{
4-
log, plaintext_log, to_binary, Api, BankMsg, Binary, Coin, CosmosMsg, Empty, Env, Extern,
5-
HandleResponse, HandleResult, HumanAddr, InitResponse, InitResult, MigrateResponse,
6-
MigrateResult, Querier, QueryRequest, QueryResult, ReadonlyStorage, StdError, StdResult,
7-
Storage, Uint128, WasmMsg, WasmQuery,
4+
log, plaintext_log, to_binary, Api, BankMsg, Binary, CanonicalAddr, Coin, CosmosMsg, Empty,
5+
Env, Extern, HandleResponse, HandleResult, HumanAddr, InitResponse, InitResult,
6+
MigrateResponse, MigrateResult, Querier, QueryRequest, QueryResult, ReadonlyStorage, StdError,
7+
StdResult, Storage, Uint128, WasmMsg, WasmQuery,
88
};
99
use secp256k1::Secp256k1;
1010

1111
/////////////////////////////// Messages ///////////////////////////////
1212

1313
use core::time;
14-
use mem::MaybeUninit;
1514
use schemars::JsonSchema;
1615
use serde::{Deserialize, Serialize};
17-
use std::{mem, thread, vec};
16+
use std::{thread, vec};
1817

1918
//// consts
2019

@@ -1647,15 +1646,13 @@ fn exec_with_callback_contract_error(
16471646
}
16481647

16491648
fn allocate_on_heap(bytes: usize) -> HandleResponse {
1650-
let mut values: Vec<u8> = vec![0; bytes];
1649+
let mut values: Box<Vec<u8>> = Box::new(vec![0; bytes]);
16511650

1652-
for i in 0..bytes {
1653-
values[i] = (bytes / i) as u8;
1654-
}
1651+
values[bytes - 1] = 1;
16551652

16561653
HandleResponse {
16571654
data: Some(Binary("😅".as_bytes().to_vec())),
1658-
log: vec![],
1655+
log: vec![log("zero", format!("{}", values[bytes / 2]))],
16591656
messages: vec![],
16601657
}
16611658
}
@@ -1701,7 +1698,13 @@ fn pass_null_pointer_to_imports_should_throw<S: Storage, A: Api, Q: Querier>(
17011698
deps: &mut Extern<S, A, Q>,
17021699
pass_type: String,
17031700
) -> HandleResponse {
1704-
let null_ptr_slice: &[u8] = unsafe { MaybeUninit::zeroed().assume_init() };
1701+
let null_ptr_slice: &[u8] = unsafe { std::slice::from_raw_parts(std::ptr::null(), 0) };
1702+
1703+
let null_ptr: *const HumanAddr = std::ptr::null();
1704+
let null_human_addr: &HumanAddr = unsafe { &*null_ptr };
1705+
1706+
let null_ptr: *const CanonicalAddr = std::ptr::null();
1707+
let null_canon_addr: &CanonicalAddr = unsafe { &*null_ptr };
17051708

17061709
match &pass_type[..] {
17071710
"read_db_key" => {
@@ -1717,13 +1720,11 @@ fn pass_null_pointer_to_imports_should_throw<S: Storage, A: Api, Q: Querier>(
17171720
deps.storage.remove(null_ptr_slice);
17181721
}
17191722
"canonicalize_address_input" => {
1720-
deps.api
1721-
.canonical_address(unsafe { MaybeUninit::zeroed().assume_init() });
1723+
deps.api.canonical_address(null_human_addr);
17221724
}
17231725
"canonicalize_address_output" => { /* TODO */ }
17241726
"humanize_address_input" => {
1725-
deps.api
1726-
.human_address(unsafe { MaybeUninit::zeroed().assume_init() });
1727+
deps.api.human_address(null_canon_addr);
17271728
}
17281729
"humanize_address_output" => { /* TODO */ }
17291730
_ => {}

cosmwasm/contracts/v010/compute-tests/test-compute-contract/contract.rs

Lines changed: 13 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -10,10 +10,9 @@ use secp256k1::Secp256k1;
1010
/////////////////////////////// Messages ///////////////////////////////
1111

1212
use core::time;
13-
use mem::MaybeUninit;
1413
use schemars::JsonSchema;
1514
use serde::{Deserialize, Serialize};
16-
use std::{mem, thread};
15+
use std::thread;
1716

1817
//// consts
1918

@@ -1644,15 +1643,13 @@ fn exec_with_callback_contract_error(
16441643
}
16451644

16461645
fn allocate_on_heap(bytes: usize) -> HandleResponse {
1647-
let mut values: Vec<u8> = vec![0; bytes];
1646+
let mut values: Box<Vec<u8>> = Box::new(vec![0; bytes]);
16481647

1649-
for i in 0..bytes {
1650-
values[i] = (bytes / i) as u8;
1651-
}
1648+
values[bytes - 1] = 1;
16521649

16531650
HandleResponse {
16541651
data: Some(Binary("😅".as_bytes().to_vec())),
1655-
log: vec![],
1652+
log: vec![log("zero", format!("{}", values[bytes / 2]))],
16561653
messages: vec![],
16571654
}
16581655
}
@@ -1698,7 +1695,13 @@ fn pass_null_pointer_to_imports_should_throw<S: Storage, A: Api, Q: Querier>(
16981695
deps: &mut Extern<S, A, Q>,
16991696
pass_type: String,
17001697
) -> HandleResponse {
1701-
let null_ptr_slice: &[u8] = unsafe { MaybeUninit::zeroed().assume_init() };
1698+
let null_ptr_slice: &[u8] = unsafe { std::slice::from_raw_parts(std::ptr::null(), 0) };
1699+
1700+
let null_ptr: *const HumanAddr = std::ptr::null();
1701+
let null_human_addr: &HumanAddr = unsafe { &*null_ptr };
1702+
1703+
let null_ptr: *const CanonicalAddr = std::ptr::null();
1704+
let null_canon_addr: &CanonicalAddr = unsafe { &*null_ptr };
17021705

17031706
match &pass_type[..] {
17041707
"read_db_key" => {
@@ -1714,13 +1717,11 @@ fn pass_null_pointer_to_imports_should_throw<S: Storage, A: Api, Q: Querier>(
17141717
deps.storage.remove(null_ptr_slice);
17151718
}
17161719
"canonicalize_address_input" => {
1717-
deps.api
1718-
.canonical_address(unsafe { MaybeUninit::zeroed().assume_init() });
1720+
deps.api.canonical_address(null_human_addr);
17191721
}
17201722
"canonicalize_address_output" => { /* TODO */ }
17211723
"humanize_address_input" => {
1722-
deps.api
1723-
.human_address(unsafe { MaybeUninit::zeroed().assume_init() });
1724+
deps.api.human_address(null_canon_addr);
17241725
}
17251726
"humanize_address_output" => { /* TODO */ }
17261727
_ => {}

cosmwasm/contracts/v010/compute-tests/test-compute-contract/src/contract.rs

Lines changed: 17 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,19 @@
11
use cosmwasm_storage::{PrefixedStorage, ReadonlySingleton, Singleton};
22

33
use cosmwasm_std::{
4-
log, plaintext_log, to_binary, Api, BankMsg, Binary, Coin, CosmosMsg, Empty, Env, Extern,
5-
HandleResponse, HandleResult, HumanAddr, InitResponse, InitResult, Querier, QueryRequest,
6-
QueryResult, ReadonlyStorage, StdError, StdResult, Storage, Uint128, WasmMsg, WasmQuery,
4+
log, plaintext_log, to_binary, Api, BankMsg, Binary, CanonicalAddr, Coin, CosmosMsg, Empty,
5+
Env, Extern, HandleResponse, HandleResult, HumanAddr, InitResponse, InitResult, Querier,
6+
QueryRequest, QueryResult, ReadonlyStorage, StdError, StdResult, Storage, Uint128, WasmMsg,
7+
WasmQuery,
78
};
89
use secp256k1::Secp256k1;
910

1011
/////////////////////////////// Messages ///////////////////////////////
1112

1213
use core::time;
13-
use mem::MaybeUninit;
1414
use schemars::JsonSchema;
1515
use serde::{Deserialize, Serialize};
16-
use std::{mem, thread};
16+
use std::thread;
1717

1818
//// consts
1919

@@ -1644,15 +1644,13 @@ fn exec_with_callback_contract_error(
16441644
}
16451645

16461646
fn allocate_on_heap(bytes: usize) -> HandleResponse {
1647-
let mut values: Vec<u8> = vec![0; bytes];
1647+
let mut values: Box<Vec<u8>> = Box::new(vec![0; bytes]);
16481648

1649-
for i in 0..bytes {
1650-
values[i] = (bytes / i) as u8;
1651-
}
1649+
values[bytes - 1] = 1;
16521650

16531651
HandleResponse {
16541652
data: Some(Binary("😅".as_bytes().to_vec())),
1655-
log: vec![],
1653+
log: vec![log("zero", format!("{}", values[bytes / 2]))],
16561654
messages: vec![],
16571655
}
16581656
}
@@ -1698,7 +1696,13 @@ fn pass_null_pointer_to_imports_should_throw<S: Storage, A: Api, Q: Querier>(
16981696
deps: &mut Extern<S, A, Q>,
16991697
pass_type: String,
17001698
) -> HandleResponse {
1701-
let null_ptr_slice: &[u8] = unsafe { MaybeUninit::zeroed().assume_init() };
1699+
let null_ptr_slice: &[u8] = unsafe { std::slice::from_raw_parts(std::ptr::null(), 0) };
1700+
1701+
let null_ptr: *const HumanAddr = std::ptr::null();
1702+
let null_human_addr: &HumanAddr = unsafe { &*null_ptr };
1703+
1704+
let null_ptr: *const CanonicalAddr = std::ptr::null();
1705+
let null_canon_addr: &CanonicalAddr = unsafe { &*null_ptr };
17021706

17031707
match &pass_type[..] {
17041708
"read_db_key" => {
@@ -1714,13 +1718,11 @@ fn pass_null_pointer_to_imports_should_throw<S: Storage, A: Api, Q: Querier>(
17141718
deps.storage.remove(null_ptr_slice);
17151719
}
17161720
"canonicalize_address_input" => {
1717-
deps.api
1718-
.canonical_address(unsafe { MaybeUninit::zeroed().assume_init() });
1721+
deps.api.canonical_address(null_human_addr);
17191722
}
17201723
"canonicalize_address_output" => { /* TODO */ }
17211724
"humanize_address_input" => {
1722-
deps.api
1723-
.human_address(unsafe { MaybeUninit::zeroed().assume_init() });
1725+
deps.api.human_address(null_canon_addr);
17241726
}
17251727
"humanize_address_output" => { /* TODO */ }
17261728
_ => {}

cosmwasm/contracts/v1/compute-tests/test-compute-contract-v2/Cargo.toml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,6 @@ overflow-checks = true
2727

2828
[features]
2929
default = []
30-
backtraces = ["cosmwasm-std/backtraces"]
3130
with_floats = []
3231

3332
[dependencies]

cosmwasm/contracts/v1/compute-tests/test-compute-contract-v2/src/contract.rs

Lines changed: 15 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,10 @@
11
use core::time;
2-
use mem::MaybeUninit;
3-
use std::{mem, thread, vec};
2+
use std::{thread, vec};
43

54
use cosmwasm_std::{
65
attr, coins, entry_point, to_binary, BankMsg, Binary, CosmosMsg, Deps, DepsMut, Empty, Env,
76
Event, MessageInfo, QueryRequest, Reply, ReplyOn, Response, StdError, StdResult, Storage,
8-
SubMsg, SubMsgResult, WasmMsg, WasmQuery, from_binary, SubMsgResponse,
7+
SubMsg, SubMsgResult, WasmMsg, WasmQuery, from_binary, SubMsgResponse, CanonicalAddr,
98
};
109
use cosmwasm_storage::PrefixedStorage;
1110
use secp256k1::Secp256k1;
@@ -2666,13 +2665,11 @@ fn exec_with_callback_contract_error(contract_addr: String, code_hash: String) -
26662665
}
26672666

26682667
fn allocate_on_heap(bytes: usize) -> Response {
2669-
let mut values: Vec<u8> = vec![0; bytes];
2670-
2671-
for i in 0..bytes {
2672-
values[i] = (bytes / i) as u8;
2673-
}
2668+
let mut values: Box<Vec<u8>> = Box::new(vec![0; bytes]);
2669+
2670+
values[bytes - 1] = 1;
26742671

2675-
Response::new().set_data("😅".as_bytes().to_vec())
2672+
Response::new().set_data("😅".as_bytes().to_vec()).add_attribute("zero", format!("{}", values[bytes / 2]))
26762673
}
26772674

26782675
fn get_state(deps: DepsMut, key: String) -> Response {
@@ -2699,7 +2696,12 @@ fn remove_state(deps: DepsMut, key: String) -> Response {
26992696
#[allow(invalid_value)]
27002697
#[allow(unused_must_use)]
27012698
fn pass_null_pointer_to_imports_should_throw(deps: DepsMut, pass_type: String) -> Response {
2702-
let null_ptr_slice: &[u8] = unsafe { MaybeUninit::zeroed().assume_init() };
2699+
let null_ptr_slice: &[u8] = unsafe { std::slice::from_raw_parts(std::ptr::null(), 0) };
2700+
2701+
let null_human_addr: &str = unsafe{ std::str::from_utf8_unchecked(null_ptr_slice) };
2702+
2703+
let null_ptr: *const CanonicalAddr = std::ptr::null();
2704+
let null_canon_addr: &CanonicalAddr = unsafe { &*null_ptr };
27032705

27042706
match &pass_type[..] {
27052707
"read_db_key" => {
@@ -2716,17 +2718,17 @@ fn pass_null_pointer_to_imports_should_throw(deps: DepsMut, pass_type: String) -
27162718
}
27172719
"canonicalize_address_input" => {
27182720
deps.api
2719-
.addr_canonicalize(unsafe { MaybeUninit::zeroed().assume_init() });
2721+
.addr_canonicalize(null_human_addr);
27202722
}
27212723
"canonicalize_address_output" => { /* TODO */ }
27222724
"humanize_address_input" => {
27232725
deps.api
2724-
.addr_humanize(unsafe { MaybeUninit::zeroed().assume_init() });
2726+
.addr_humanize(null_canon_addr);
27252727
}
27262728
"humanize_address_output" => { /* TODO */ }
27272729
"validate_address_input" => {
27282730
deps.api
2729-
.addr_validate(unsafe { MaybeUninit::zeroed().assume_init() });
2731+
.addr_validate(null_human_addr);
27302732
}
27312733
"validate_address_output" => { /* TODO */ }
27322734
_ => {}

cosmwasm/contracts/v1/compute-tests/test-compute-contract/Cargo.toml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,6 @@ overflow-checks = true
2727

2828
[features]
2929
default = []
30-
backtraces = ["cosmwasm-std/backtraces"]
3130
with_floats = []
3231

3332
[dependencies]

cosmwasm/contracts/v1/compute-tests/test-compute-contract/src/contract.rs

Lines changed: 15 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,10 @@
11
use core::time;
2-
use mem::MaybeUninit;
3-
use std::{mem, thread, vec};
2+
use std::{thread, vec};
43

54
use cosmwasm_std::{
65
attr, coins, entry_point, to_binary, BankMsg, Binary, CosmosMsg, Deps, DepsMut, Empty, Env,
76
Event, MessageInfo, QueryRequest, Reply, ReplyOn, Response, StdError, StdResult, Storage,
8-
SubMsg, SubMsgResponse, SubMsgResult, WasmMsg, WasmQuery, from_binary,
7+
SubMsg, SubMsgResponse, SubMsgResult, WasmMsg, WasmQuery, from_binary, CanonicalAddr,
98
};
109
use cosmwasm_storage::PrefixedStorage;
1110
use secp256k1::Secp256k1;
@@ -2659,13 +2658,11 @@ fn exec_with_callback_contract_error(contract_addr: String, code_hash: String) -
26592658
}
26602659

26612660
fn allocate_on_heap(bytes: usize) -> Response {
2662-
let mut values: Vec<u8> = vec![0; bytes];
2663-
2664-
for i in 0..bytes {
2665-
values[i] = (bytes / i) as u8;
2666-
}
2661+
let mut values: Box<Vec<u8>> = Box::new(vec![0; bytes]);
2662+
2663+
values[bytes - 1] = 1;
26672664

2668-
Response::new().set_data("😅".as_bytes().to_vec())
2665+
Response::new().set_data("😅".as_bytes().to_vec()).add_attribute("zero", format!("{}", values[bytes / 2]))
26692666
}
26702667

26712668
fn get_state(deps: DepsMut, key: String) -> Response {
@@ -2692,7 +2689,12 @@ fn remove_state(deps: DepsMut, key: String) -> Response {
26922689
#[allow(invalid_value)]
26932690
#[allow(unused_must_use)]
26942691
fn pass_null_pointer_to_imports_should_throw(deps: DepsMut, pass_type: String) -> Response {
2695-
let null_ptr_slice: &[u8] = unsafe { MaybeUninit::zeroed().assume_init() };
2692+
let null_ptr_slice: &[u8] = unsafe { std::slice::from_raw_parts(std::ptr::null(), 0) };
2693+
2694+
let null_human_addr: &str = unsafe{ std::str::from_utf8_unchecked(null_ptr_slice) };
2695+
2696+
let null_ptr: *const CanonicalAddr = std::ptr::null();
2697+
let null_canon_addr: &CanonicalAddr = unsafe { &*null_ptr };
26962698

26972699
match &pass_type[..] {
26982700
"read_db_key" => {
@@ -2709,17 +2711,17 @@ fn pass_null_pointer_to_imports_should_throw(deps: DepsMut, pass_type: String) -
27092711
}
27102712
"canonicalize_address_input" => {
27112713
deps.api
2712-
.addr_canonicalize(unsafe { MaybeUninit::zeroed().assume_init() });
2714+
.addr_canonicalize(null_human_addr);
27132715
}
27142716
"canonicalize_address_output" => { /* TODO */ }
27152717
"humanize_address_input" => {
27162718
deps.api
2717-
.addr_humanize(unsafe { MaybeUninit::zeroed().assume_init() });
2719+
.addr_humanize(null_canon_addr);
27182720
}
27192721
"humanize_address_output" => { /* TODO */ }
27202722
"validate_address_input" => {
27212723
deps.api
2722-
.addr_validate(unsafe { MaybeUninit::zeroed().assume_init() });
2724+
.addr_validate(null_human_addr);
27232725
}
27242726
"validate_address_output" => { /* TODO */ }
27252727
_ => {}

cosmwasm/enclaves/shared/contract-engine/src/contract_validation.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -627,6 +627,7 @@ fn verify_input(
627627
verify_tx_bytes(sig_info, &sdk_messages)?;
628628

629629
let is_verified = verify_input_params(
630+
#[cfg(feature = "light-client-validation")]
630631
sig_info,
631632
&sdk_messages,
632633
sender,
@@ -859,7 +860,7 @@ fn verify_callback_sig_impl(
859860

860861
#[allow(clippy::too_many_arguments)]
861862
fn verify_input_params(
862-
sig_info: &SigInfo,
863+
#[cfg(feature = "light-client-validation")] sig_info: &SigInfo,
863864
sdk_messages: &[DirectSdkMsg],
864865
sender: &CanonicalAddr,
865866
sent_funds: &[Coin],

0 commit comments

Comments
 (0)