False Negative: ConstantExpAppearsNonConstant.ql misses expressions that stay constant after trivial local rewrites.
還沒有人認領這個 Issue。
評估
研究方向
從 Likely Bugs/Arithmetic/ConstantExpAppearsNonConstant.ql 開始,檢查它如何透過區域變數和重寫後的表達式傳播常數結果。查看 PosCase1.java、PosCase3_Var1.java 和 PosCase3_Var2.java,作為受影響的範例。完成的標準是查詢能夠辨識所描述的常數表達式,同時不遺失現有的偵測行為。
由索引模型根據 Issue 內容生成。
描述
Version
codeql 2.24.3
Checker
- Checker id:
Likely Bugs/Arithmetic/ConstantExpAppearsNonConstant.ql - Checker description: This checker detects expressions that always evaluate to the same constant value but are not recognized as compile-time constants by the compiler, often due to containing non-constant sub-expressions that don't affect the final result.
Description of the false negative
These cases still reduce to a constant result at runtime. One multiplies by zero. The others use true || condition, which is still always true regardless of the non-constant boolean input.
The only change is that the constant-looking behavior is expressed through locals or a slightly different spelling.
Affected test cases
PosCase1.java
nonConstant * 0 still evaluates to zero regardless of the non-constant operand.
PosCase3_Var1.java and PosCase3_Var2.java
Both variants are still logical constants. Boolean.TRUE || condition and alwaysTrue || condition should both be recognized as always true.
Cause analysis
This looks like a propagation gap. Likely Bugs/Arithmetic/ConstantExpAppearsNonConstant.ql appears to lose the constant result once the expression is one step less direct, even though the same algebraic reasoning still applies.
That makes the query miss a kind of bug it should be well suited to catch.
Reproduction code
PosCase1.java
// Multiplication by zero with integer literal zero operand should be flagged as always evaluating to zero.
package scensct.core.pos;
public class PosCase1 {
public PosCase1() {
int nonConstant = getNonConstant(); // Non-constant subexpression
int result = nonConstant * 0; // Multiplication by zero, always zero
// Use result in a conditional to emphasize constant evaluation
if (result == 0) {
// This branch is always taken
System.out.println("Always zero");
}
}
private int getNonConstant() {
return (int) (Math.random() * 100); // Non-constant value
}
}
References
None known.
- 主要語言
- CodeQL
- 星號
- 10.1k
- 分支
- 2.1k
- 平均合併
- 2 天 16 小時
- 30 天內合併 PR
- 143
貢獻指南
從這裡開始
- 先讀完整個 Issue,再讀專案的貢獻指南。
- 在 Issue 下留言說明你要接手 —— 這能避免兩個人做同樣的事。
- Fork 儲存庫,在一個分支上完成修改。
- 送出 Pull Request,並在描述裡引用這個 Issue 編號。
github/codeql 的其他 Issue
-
agentic-workflows
難度 2/5 1-3 小時 新手友好度 70/100
-
false-positive javascript
難度 2/5 1-3 小時 新手友好度 84/100
-
難度 2/5 1-3 小時 新手友好度 82/100
-
難度 2/5 1-3 小時 新手友好度 78/100
-
false-positive
難度 2/5 1-3 小時 新手友好度 70/100
相似的 Issue
-
難度 2/5 1-3 小時 新手友好度 75/100
docToolchain/docToolchain#1705 ·
-
難度 2/5 1-3 小時 新手友好度 75/100
modelcontextprotocol/python-sdk#3566 ·
-
Mend: dependency security vulnerability status: needs triage 🕵️♀️
難度 2/5 1-3 小時 新手友好度 70/100
carbon-design-system/ibm-products#9907 ·
-
agent/security hive/hosted-available-lke648397-260827-5n31 security
難度 2/5 1-3 小時 新手友好度 75/100
-
enhancement
難度 2/5 1-3 小時 新手友好度 70/100
canonical/paas-charm#368 · 1 則留言 ·