Skip to content

Commit

Permalink
move: resolve function names in ID leak verifier errors (MystenLabs#7909
Browse files Browse the repository at this point in the history
)
  • Loading branch information
rvantonder authored Feb 1, 2023
1 parent 05a17f3 commit f357c63
Show file tree
Hide file tree
Showing 10 changed files with 29 additions and 11 deletions.
4 changes: 4 additions & 0 deletions crates/sui-types/src/error.rs
Original file line number Diff line number Diff line change
Expand Up @@ -681,6 +681,10 @@ impl ExecutionError {
&self.inner.kind
}

pub fn source(&self) -> &Option<BoxError> {
&self.inner.source
}

pub fn to_execution_status(&self) -> ExecutionFailureStatus {
self.kind().clone()
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,4 +2,4 @@ processed 1 task

task 0 'publish'. lines 4-25:
Error: Transaction Effects Status: Sui Move Bytecode Verification Error. Please run the Sui Move Verifier for more information.
Execution Error: ExecutionError: ExecutionError { inner: ExecutionErrorInner { kind: SuiMoveVerificationError, source: Some("ID leaked through function call.") } }
Execution Error: ExecutionError: ExecutionError { inner: ExecutionErrorInner { kind: SuiMoveVerificationError, source: Some("ID leaked through function call. Found in _::m::foo") } }
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,8 @@ processed 2 tasks

task 0 'publish'. lines 4-25:
Error: Transaction Effects Status: Sui Move Bytecode Verification Error. Please run the Sui Move Verifier for more information.
Execution Error: ExecutionError: ExecutionError { inner: ExecutionErrorInner { kind: SuiMoveVerificationError, source: Some("ID is leaked into a struct.") } }
Execution Error: ExecutionError: ExecutionError { inner: ExecutionErrorInner { kind: SuiMoveVerificationError, source: Some("ID is leaked into a struct. Found in _::m::foo") } }

task 1 'publish'. lines 27-48:
Error: Transaction Effects Status: Sui Move Bytecode Verification Error. Please run the Sui Move Verifier for more information.
Execution Error: ExecutionError: ExecutionError { inner: ExecutionErrorInner { kind: SuiMoveVerificationError, source: Some("ID leaked through function call.") } }
Execution Error: ExecutionError: ExecutionError { inner: ExecutionErrorInner { kind: SuiMoveVerificationError, source: Some("ID leaked through function call. Found in _::m::foo") } }
Original file line number Diff line number Diff line change
Expand Up @@ -2,4 +2,4 @@ processed 1 task

task 0 'publish'. lines 4-34:
Error: Transaction Effects Status: Sui Move Bytecode Verification Error. Please run the Sui Move Verifier for more information.
Execution Error: ExecutionError: ExecutionError { inner: ExecutionErrorInner { kind: SuiMoveVerificationError, source: Some("ID leaked through function call.") } }
Execution Error: ExecutionError: ExecutionError { inner: ExecutionErrorInner { kind: SuiMoveVerificationError, source: Some("ID leaked through function call. Found in _::m::bad") } }
Original file line number Diff line number Diff line change
Expand Up @@ -2,4 +2,4 @@ processed 1 task

task 0 'publish'. lines 4-19:
Error: Transaction Effects Status: Sui Move Bytecode Verification Error. Please run the Sui Move Verifier for more information.
Execution Error: ExecutionError: ExecutionError { inner: ExecutionErrorInner { kind: SuiMoveVerificationError, source: Some("ID leaked through function return.") } }
Execution Error: ExecutionError: ExecutionError { inner: ExecutionErrorInner { kind: SuiMoveVerificationError, source: Some("ID leaked through function return. Found in _::m::foo") } }
Original file line number Diff line number Diff line change
Expand Up @@ -2,4 +2,4 @@ processed 1 task

task 0 'publish'. lines 4-19:
Error: Transaction Effects Status: Sui Move Bytecode Verification Error. Please run the Sui Move Verifier for more information.
Execution Error: ExecutionError: ExecutionError { inner: ExecutionErrorInner { kind: SuiMoveVerificationError, source: Some("ID is leaked into a struct.") } }
Execution Error: ExecutionError: ExecutionError { inner: ExecutionErrorInner { kind: SuiMoveVerificationError, source: Some("ID is leaked into a struct. Found in _::m::foo") } }
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,8 @@ processed 2 tasks

task 0 'publish'. lines 4-36:
Error: Transaction Effects Status: Sui Move Bytecode Verification Error. Please run the Sui Move Verifier for more information.
Execution Error: ExecutionError: ExecutionError { inner: ExecutionErrorInner { kind: SuiMoveVerificationError, source: Some("ID is leaked into a struct.") } }
Execution Error: ExecutionError: ExecutionError { inner: ExecutionErrorInner { kind: SuiMoveVerificationError, source: Some("ID is leaked into a struct. Found in _::test::test") } }

task 1 'publish'. lines 38-60:
Error: Transaction Effects Status: Sui Move Bytecode Verification Error. Please run the Sui Move Verifier for more information.
Execution Error: ExecutionError: ExecutionError { inner: ExecutionErrorInner { kind: SuiMoveVerificationError, source: Some("ID is leaked into a struct.") } }
Execution Error: ExecutionError: ExecutionError { inner: ExecutionErrorInner { kind: SuiMoveVerificationError, source: Some("ID is leaked into a struct. Found in _::m::foo") } }
Original file line number Diff line number Diff line change
Expand Up @@ -2,4 +2,4 @@ processed 1 task

task 0 'publish'. lines 4-20:
Error: Transaction Effects Status: Sui Move Bytecode Verification Error. Please run the Sui Move Verifier for more information.
Execution Error: ExecutionError: ExecutionError { inner: ExecutionErrorInner { kind: SuiMoveVerificationError, source: Some("ID is leaked into a vector.") } }
Execution Error: ExecutionError: ExecutionError { inner: ExecutionErrorInner { kind: SuiMoveVerificationError, source: Some("ID is leaked into a vector. Found in _::m::foo") } }
Original file line number Diff line number Diff line change
Expand Up @@ -2,4 +2,4 @@ processed 1 task

task 0 'publish'. lines 4-28:
Error: Transaction Effects Status: Sui Move Bytecode Verification Error. Please run the Sui Move Verifier for more information.
Execution Error: ExecutionError: ExecutionError { inner: ExecutionErrorInner { kind: SuiMoveVerificationError, source: Some("ID is leaked into a struct.") } }
Execution Error: ExecutionError: ExecutionError { inner: ExecutionErrorInner { kind: SuiMoveVerificationError, source: Some("ID is leaked into a struct. Found in _::m::transmute") } }
16 changes: 15 additions & 1 deletion crates/sui-verifier/src/id_leak_verifier.rs
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,21 @@ fn verify_id_leak(module: &CompiledModule) -> Result<(), ExecutionError> {
FunctionView::function(module, FunctionDefinitionIndex(index as u16), code, handle);
let initial_state = AbstractState::new(&func_view);
let mut verifier = IDLeakAnalysis::new(&binary_view, &func_view);
verifier.analyze_function(initial_state, &func_view)?;
verifier
.analyze_function(initial_state, &func_view)
.map_err(|err| {
if let Some(message) = err.source().as_ref() {
let function_name = binary_view
.identifier_at(binary_view.function_handle_at(func_def.function).name);
let module_name = module.self_id();
verification_failure(format!(
"{} Found in {module_name}::{function_name}",
message
))
} else {
err
}
})?;
}

Ok(())
Expand Down

0 comments on commit f357c63

Please sign in to comment.