add ability to specify module and function names

This commit is contained in:
vms 2019-08-10 13:59:00 +03:00
parent 155c7253c3
commit 13035b68ea
3 changed files with 10 additions and 10 deletions

View File

@ -17,7 +17,7 @@ fn main() {
let module = parity_wasm::deserialize_file(&args[1]).expect("Module deserialization to succeed");
let result = utils::inject_gas_counter(
module, &Default::default()
module, &Default::default(), "env", "gas"
).expect("Failed to inject gas. Some forbidden opcodes?");
parity_wasm::serialize_to_file(&args[2], result).expect("Module serialization to succeed")

View File

@ -420,7 +420,7 @@ fn insert_metering_calls(
///
/// The function fails if the module contains any operation forbidden by gas rule set, returning
/// the original module as an Err.
pub fn inject_gas_counter(module: elements::Module, rules: &rules::Set)
pub fn inject_gas_counter(module: elements::Module, rules: &rules::Set, host_module_name: &str, host_func_name: &str)
-> Result<elements::Module, elements::Module>
{
// Injecting gas counting external
@ -433,8 +433,8 @@ pub fn inject_gas_counter(module: elements::Module, rules: &rules::Set)
mbuilder.push_import(
builder::import()
.module("env")
.field("gas")
.module(host_module_name)
.field(host_func_name)
.external().func(import_sig)
.build()
);
@ -534,7 +534,7 @@ mod tests {
.build()
.build();
let injected_module = inject_gas_counter(module, &rules::Set::default().with_grow_cost(10000)).unwrap();
let injected_module = inject_gas_counter(module, &rules::Set::default().with_grow_cost(10000), "env", "gas").unwrap();
assert_eq!(
get_function_body(&injected_module, 0).unwrap(),
@ -583,7 +583,7 @@ mod tests {
.build()
.build();
let injected_module = inject_gas_counter(module, &rules::Set::default()).unwrap();
let injected_module = inject_gas_counter(module, &rules::Set::default(), "env", "gas").unwrap();
assert_eq!(
get_function_body(&injected_module, 0).unwrap(),
@ -634,7 +634,7 @@ mod tests {
.build()
.build();
let injected_module = inject_gas_counter(module, &Default::default()).unwrap();
let injected_module = inject_gas_counter(module, &Default::default(), "env", "gas").unwrap();
assert_eq!(
get_function_body(&injected_module, 1).unwrap(),
@ -681,7 +681,7 @@ mod tests {
let rules = rules::Set::default().with_forbidden_floats();
if let Err(_) = inject_gas_counter(module, &rules) { }
if let Err(_) = inject_gas_counter(module, &rules, "env", "gas") { }
else { panic!("Should be error because of the forbidden operation")}
}
@ -702,7 +702,7 @@ mod tests {
let input_module = parse_wat($input);
let expected_module = parse_wat($expected);
let injected_module = inject_gas_counter(input_module, &Default::default())
let injected_module = inject_gas_counter(input_module, &Default::default(), "env", "gas")
.expect("inject_gas_counter call failed");
let actual_func_body = get_function_body(&injected_module, 0)

View File

@ -110,7 +110,7 @@ mod gas {
let rules = utils::rules::Set::default();
let module = elements::deserialize_buffer(input).expect("Failed to deserialize");
let instrumented = utils::inject_gas_counter(module, &rules).expect("Failed to instrument with gas metering");
let instrumented = utils::inject_gas_counter(module, &rules, "env", "gas").expect("Failed to instrument with gas metering");
elements::serialize(instrumented).expect("Failed to serialize")
});
}