Skip to content

Commit db29a38

Browse files
committed
docs(blog): reframe engine-vs-rules takeaway, drop inaccurate dataflow-model framing
1 parent 2e07442 commit db29a38

1 file changed

Lines changed: 1 addition & 1 deletion

File tree

src/content/blog/semgrep-vs-codeql-vs-opentaint.mdx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -441,7 +441,7 @@ Each tool plateaus at a different depth of analysis:
441441
- **CodeQL** covers most cases but its analysis limits surface at deep field chains and virtual calls.
442442
- **OpenTaint** tracks data through all five cases — including builder state, constructor chains, and interface dispatch — using the same pattern rules throughout.
443443

444-
The key design difference: in Semgrep, the rule author declares the dataflow model — sources, sinks, sanitizers. In OpenTaint, the engine infers it. A pattern that mentions a parameter and a return statement is enough for the engine to recover the full flow — across assignments, method calls, and object boundaries.
444+
What separates the tools here isn't rule syntax — they all express roughly the same source-to-sink intent. It's how far each engine carries a tracked value on its own. In OpenTaint the same pattern rule that catches a value returned directly also catches one routed through a builder. The assignments, inter-procedural calls, field state, and virtual dispatch in between are resolved by the engine, not spelled out in the rule.
445445

446446
Real codebases are full of these patterns. As code grows it adds helpers, builders, persistence layers, and interface calls, and each one is another place a scanner can lose the value it is tracking. The more layers there are, the more a tool misses. This is why, over time, the engine matters more than the rules. A rule that says *what* to look for and leaves the *how* of tracking to the engine is the one that keeps working as the code gets more complex.
447447

0 commit comments

Comments
 (0)