Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -277,10 +277,6 @@ module Global<ConfigSig ContentConfig> {
}
}

// important to use `edges` and not `PathNode::getASuccessor()`, as the latter
// is not pruned for reachability
private predicate pathSucc = Flow::PathGraph::edges/2;

/**
* Provides a big-step flow relation, where flow stops at read/store steps that
* must be recorded, and flow via `subpaths` such that reads/stores inside
Expand All @@ -290,10 +286,7 @@ module Global<ConfigSig ContentConfig> {
private predicate reachesSink(Flow::PathNode node) {
FlowConfig::isSink(node.getNode(), node.getState())
or
exists(Flow::PathNode mid |
pathSucc(node, mid) and
reachesSink(mid)
)
reachesSink(node.getASuccessor())
}

/**
Expand All @@ -302,7 +295,7 @@ module Global<ConfigSig ContentConfig> {
*/
pragma[nomagic]
private predicate excludeStep(Flow::PathNode pred, Flow::PathNode succ) {
pathSucc(pred, succ) and
pred.getASuccessor() = succ and
(
// we need to record reads/stores inside summarized callables
Flow::PathGraph::subpaths(pred, _, _, succ)
Expand Down Expand Up @@ -356,7 +349,7 @@ module Global<ConfigSig ContentConfig> {

pragma[nomagic]
private predicate step(Flow::PathNode pred, Flow::PathNode succ) {
pathSucc(pred, succ) and
pred.getASuccessor() = succ and
not excludeStep(pred, succ)
}

Expand Down Expand Up @@ -471,7 +464,7 @@ module Global<ConfigSig ContentConfig> {
exists(Flow::PathNode mid |
nodeReaches(source, scReads, scStores, mid, reads, stores) and
storeStep(mid.getNode(), mid.getState(), c, node.getNode(), node.getState()) and
pathSucc(mid, node)
mid.getASuccessor() = node
)
}

Expand All @@ -483,7 +476,7 @@ module Global<ConfigSig ContentConfig> {
exists(Flow::PathNode mid |
nodeReaches(source, scReads, scStores, mid, reads, stores) and
readStep(mid.getNode(), mid.getState(), c, node.getNode(), node.getState()) and
pathSucc(mid, node)
mid.getASuccessor() = node
)
}

Expand Down