Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
C
cwe_checker
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
fact-depend
cwe_checker
Commits
1fcc30cb
Unverified
Commit
1fcc30cb
authored
2 years ago
by
Enkelmann
Committed by
GitHub
2 years ago
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Prevent panic on non-converging globals propagation (#409)
parent
d84f5170
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
15 additions
and
5 deletions
+15
-5
global_var_propagation.rs
...src/analysis/function_signature/global_var_propagation.rs
+14
-4
mod.rs
src/cwe_checker_lib/src/analysis/function_signature/mod.rs
+1
-1
No files found.
src/cwe_checker_lib/src/analysis/function_signature/global_var_propagation.rs
View file @
1fcc30cb
...
...
@@ -10,6 +10,7 @@ use crate::analysis::callgraph::get_program_callgraph;
use
crate
::
analysis
::
callgraph
::
CallGraph
;
use
crate
::
analysis
::
fixpoint
::{
Computation
,
Context
};
use
crate
::
intermediate_representation
::
*
;
use
crate
::
utils
::
log
::
LogMessage
;
use
std
::
collections
::
BTreeMap
;
use
std
::
collections
::
HashSet
;
...
...
@@ -162,6 +163,7 @@ fn propagate_globals_bottom_up(
project
:
&
Project
,
known_globals
:
&
BTreeMap
<
Tid
,
HashSet
<
u64
>>
,
fn_sigs
:
&
mut
BTreeMap
<
Tid
,
FunctionSignature
>
,
logs
:
&
mut
Vec
<
LogMessage
>
,
)
{
// To propagate bottom-up, we have to reverse the edges in the callgraph
let
mut
graph
=
get_program_callgraph
(
&
project
.program
);
...
...
@@ -183,7 +185,11 @@ fn propagate_globals_bottom_up(
// Compute the fixpoint
computation
.compute_with_max_steps
(
100
);
if
!
computation
.has_stabilized
()
{
panic!
(
"Global parameter propagation algorithm did not stabilize."
)
let
error_msg
=
format!
(
"Global parameter propagation algorithm did not stabilize. Remaining worklist size: {}"
,
computation
.get_worklist
()
.len
()
);
logs
.push
(
LogMessage
::
new_error
(
error_msg
)
.source
(
"Function Signature Analysis"
));
}
// Add the propagated globals to the function signatures
for
node
in
graph
.node_indices
()
{
...
...
@@ -217,9 +223,13 @@ fn propagate_globals_bottom_up(
/// But if the function itself (or any of its callers) do not access the global variable,
/// then there is no benefit in tracking its value for the function itself.
/// Thus, the global variable should not be propagated to the function in such a case.
pub
fn
propagate_globals
(
project
:
&
Project
,
fn_sigs
:
&
mut
BTreeMap
<
Tid
,
FunctionSignature
>
)
{
pub
fn
propagate_globals
(
project
:
&
Project
,
fn_sigs
:
&
mut
BTreeMap
<
Tid
,
FunctionSignature
>
,
logs
:
&
mut
Vec
<
LogMessage
>
,
)
{
let
known_globals
=
propagate_known_globals_top_down
(
project
,
fn_sigs
);
propagate_globals_bottom_up
(
project
,
&
known_globals
,
fn_sigs
);
propagate_globals_bottom_up
(
project
,
&
known_globals
,
fn_sigs
,
logs
);
}
#[cfg(test)]
...
...
@@ -271,7 +281,7 @@ pub mod tests {
]);
// Propagate globals
propagate_globals
(
&
project
,
&
mut
fn_sigs
);
propagate_globals
(
&
project
,
&
mut
fn_sigs
,
&
mut
Vec
::
new
()
);
// Check propagation results
assert_eq!
(
&
fn_sigs
[
&
Tid
::
new
(
"main"
)]
.global_parameters
,
...
...
This diff is collapsed.
Click to expand it.
src/cwe_checker_lib/src/analysis/function_signature/mod.rs
View file @
1fcc30cb
...
...
@@ -168,7 +168,7 @@ pub fn compute_function_signatures<'a>(
}
}
// Propagate globals in bottom-up direction in the call graph
propagate_globals
(
project
,
&
mut
fn_sig_map
);
propagate_globals
(
project
,
&
mut
fn_sig_map
,
&
mut
logs
);
(
fn_sig_map
,
logs
)
}
...
...
This diff is collapsed.
Click to expand it.
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment