MCPcopy Create free account
hub / github.com/Rust-API/Rust-API-Bypass-Checker / run_terminator

Method run_terminator

src/checker/assertion_checker.rs:70–139  ·  view source on GitHub ↗
(
        &mut self,
        term: &Terminator<'tcx>,
        abstract_value: &AbstractDomain<DomainType>,
    )

Source from the content-addressed store, hash-verified

68 IntervalAbstractDomain<DomainType>: GetDomainType,
69{
70 fn run_terminator(
71 &mut self,
72 term: &Terminator<'tcx>,
73 abstract_value: &AbstractDomain<DomainType>,
74 ) {
75 let Terminator { source_info, kind } = term;
76 let span = source_info.span;
77 if let TerminatorKind::Assert {
78 cond,
79 expected,
80 msg,
81 ..
82 } = &kind
83 {
84 debug!(
85 "Checking assertion: {:?} with message: {:?}, exptected: {}",
86 term, msg, expected
87 );
88 debug!("Current state: {:?}", abstract_value);
89
90 if let Some(place) = cond.place() {
91 if let Some(cond_val) = self.body_visitor.place_to_abstract_value.get(&place) {
92 debug!("place: {:?}, cond_val: {:?}", place, cond_val);
93 let cond_val = cond_val.clone();
94 let check_result = match msg.deref() {
95 mir::AssertKind::Overflow(..) => {
96 self.check_overflow(cond_val.clone(), *expected, abstract_value)
97 }
98 mir::AssertKind::MisalignedPointerDereference { .. } => {
99 return;
100 }
101 _ => self.check_assert_condition(cond_val, *expected, abstract_value),
102 };
103
104 match check_result {
105 CheckerResult::Safe => (),
106 CheckerResult::Unsafe => {
107 let error = self.body_visitor.context.session.dcx().struct_span_warn(
108 span,
109 format!(
110 "[Bypasser] Provably error: {:?}",
111 self.body_visitor.recover_var_name(msg.deref())
112 ),
113 );
114 self.body_visitor.emit_diagnostic(
115 error,
116 false,
117 DiagnosticCause::from(msg.deref()),
118 );
119 }
120 CheckerResult::Warning => {
121 // let warning = self.body_visitor.context.session.dcx().struct_span_warn(
122 // span,
123 // format!(
124 // "[Bypasser] Possible error: {:?}",
125 // self.body_visitor.recover_var_name(msg.deref())
126 // ),
127 // );

Callers 1

runMethod · 0.80

Calls 5

derefMethod · 0.80
check_overflowMethod · 0.80
emit_diagnosticMethod · 0.80
getMethod · 0.45

Tested by

no test coverage detected