From fb993784117fdb83af6c7ce4d1deb38ed052b8b0 Mon Sep 17 00:00:00 2001 From: Graydon Hoare Date: Tue, 4 Jul 2023 20:29:16 -0700 Subject: [PATCH] Add testcase for out-of-order scmaps, fix #223. --- soroban-env-host/src/test/map.rs | 27 +++++++++++++++++++++++++-- 1 file changed, 25 insertions(+), 2 deletions(-) diff --git a/soroban-env-host/src/test/map.rs b/soroban-env-host/src/test/map.rs index 15a4b10ea..8878d1343 100644 --- a/soroban-env-host/src/test/map.rs +++ b/soroban-env-host/src/test/map.rs @@ -9,8 +9,8 @@ use soroban_env_common::{ }; use crate::{ - xdr::{ScMap, ScMapEntry, ScVal, ScVec}, - Env, Error, Host, HostError, Symbol, Val, + xdr::{ScMap, ScMapEntry, ScVal, ScVec, VecM}, + Env, Error, Host, HostError, Symbol, TryFromVal, Val, }; #[test] @@ -302,3 +302,26 @@ fn map_stack_no_overflow_65536_boxed_keys_and_vals() { } } } + +#[test] +fn scmap_out_of_order() { + let host = Host::default(); + let bad_scmap = ScVal::Map(Some(ScMap( + VecM::try_from(vec![ + ScMapEntry { + key: ScVal::U32(2), + val: ScVal::U32(0), + }, + ScMapEntry { + key: ScVal::U32(3), + val: ScVal::U32(0), + }, + ScMapEntry { + key: ScVal::U32(1), + val: ScVal::U32(0), + }, + ]) + .unwrap(), + ))); + assert!(Val::try_from_val(&host, &bad_scmap).is_err()); +}