mirror of
https://github.com/elicpeter/nyx.git
synced 2026-07-06 20:42:10 +02:00
Authorization analysis logic improvements (#61)
This commit is contained in:
parent
3c89bddbf2
commit
40995e45e7
55 changed files with 4193 additions and 134 deletions
|
|
@ -1406,6 +1406,7 @@ pub(crate) fn extract_intra_file_ssa_summaries(
|
|||
mod_aliases_ref,
|
||||
None,
|
||||
Some(&formal_params),
|
||||
None,
|
||||
);
|
||||
|
||||
// Only store if the summary has observable effects. With
|
||||
|
|
@ -1531,6 +1532,11 @@ pub(crate) fn lower_all_functions_from_bodies(
|
|||
} else {
|
||||
Some(&mod_aliases)
|
||||
};
|
||||
let formal_destructured = if !body.meta.param_destructured_fields.is_empty() {
|
||||
Some(body.meta.param_destructured_fields.as_slice())
|
||||
} else {
|
||||
None
|
||||
};
|
||||
let summary = ssa_transfer::extract_ssa_func_summary(
|
||||
&func_ssa,
|
||||
&body.graph,
|
||||
|
|
@ -1543,6 +1549,7 @@ pub(crate) fn lower_all_functions_from_bodies(
|
|||
mod_aliases_ref,
|
||||
locator,
|
||||
Some(formal_params),
|
||||
formal_destructured,
|
||||
);
|
||||
|
||||
// Always insert the summary, even when all fields are empty/default.
|
||||
|
|
@ -1775,6 +1782,11 @@ fn rerun_extraction_with_augmented_summaries(
|
|||
Some(&mod_aliases)
|
||||
};
|
||||
|
||||
let formal_destructured = if !body.meta.param_destructured_fields.is_empty() {
|
||||
Some(body.meta.param_destructured_fields.as_slice())
|
||||
} else {
|
||||
None
|
||||
};
|
||||
let new_summary = ssa_transfer::extract_ssa_func_summary_full(
|
||||
&callee.ssa,
|
||||
parent_cfg,
|
||||
|
|
@ -1788,6 +1800,7 @@ fn rerun_extraction_with_augmented_summaries(
|
|||
locator,
|
||||
Some(&body.meta.params),
|
||||
Some(&augmented_snapshot),
|
||||
formal_destructured,
|
||||
);
|
||||
|
||||
// OR-merge sink-only fields into the existing summary.
|
||||
|
|
@ -1796,8 +1809,16 @@ fn rerun_extraction_with_augmented_summaries(
|
|||
}
|
||||
}
|
||||
|
||||
/// OR-merge `param_to_sink` and `param_to_sink_param` from `src` into
|
||||
/// `dst`. Existing entries are preserved; only NEW entries are added.
|
||||
/// OR-merge `param_to_sink`, `param_to_sink_param`, and
|
||||
/// `validated_params_to_return` from `src` into `dst`. Existing entries
|
||||
/// are preserved; only NEW entries are added.
|
||||
///
|
||||
/// The validated-param list grows monotonically across extraction
|
||||
/// rounds: a parameter that proves validated under any extraction
|
||||
/// pass (the augmented second pass typically resolves more
|
||||
/// cross-function summaries than the first) stays validated. Drops
|
||||
/// here would silently lose CVE-2026-25544-class precision the
|
||||
/// re-extraction pass was specifically designed to recover.
|
||||
fn merge_sink_fields(
|
||||
dst: &mut crate::summary::ssa_summary::SsaFuncSummary,
|
||||
src: &crate::summary::ssa_summary::SsaFuncSummary,
|
||||
|
|
@ -1823,6 +1844,11 @@ fn merge_sink_fields(
|
|||
dst.param_to_sink_param.push((idx, pos, caps));
|
||||
}
|
||||
}
|
||||
for &idx in &src.validated_params_to_return {
|
||||
if !dst.validated_params_to_return.contains(&idx) {
|
||||
dst.validated_params_to_return.push(idx);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// Walk lexical-containment children of every parent body and lift
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue