False Negative: ConstantExpAppearsNonConstant.ql misses expressions that stay constant after trivial local rewrites.
Dieses Issue hat noch niemand übernommen.
Bewertung
- Schwierigkeit
- 4/5
- Geschätzter Aufwand
- 3-5 Tage
- Anfängerfreundlichkeit
- 48/100
Rechercherichtung
Beginne mit Likely Bugs/Arithmetic/ConstantExpAppearsNonConstant.ql und untersuche, wie es konstante Ergebnisse durch lokale Variablen und umgeschriebene Ausdrücke weitergibt. Überprüfe PosCase1.java, PosCase3_Var1.java und PosCase3_Var2.java als betroffene Beispiele. Als abgeschlossen gilt die Aufgabe, wenn die Abfrage die beschriebenen konstanten Ausdrücke erkennt, ohne das bestehende Erkennungsverhalten zu verlieren.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Beschreibung
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.
- Vorherrschende Sprache
- CodeQL
- Sterne
- 10.1k
- Forks
- 2.1k
- Ø Merge
- 2 T. 16 Std.
- Gemergte PRs (30 T.)
- 143
Beitragsleitfaden
Erste Schritte
- Lesen Sie das ganze Issue und danach den Beitragsleitfaden des Projekts.
- Schreiben Sie ins Issue, dass Sie es übernehmen — das erspart doppelte Arbeit.
- Forken Sie das Repository und arbeiten Sie in einem Branch.
- Öffnen Sie einen Pull Request, der die Issue-Nummer nennt.
Mehr aus github/codeql
-
agentic-workflows
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 70/100
-
false-positive javascript
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 84/100
-
C#: cs/simplifiable-boolean-expression false positive on Nullable<bool> compared with a literal Offen
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 82/100
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 78/100
-
false-positive
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 70/100
Ähnliche Issues
-
enhancement
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 70/100
canonical/paas-charm#368 · 1 Kommentar ·
-
enhancement
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 75/100
palladius/rails8-app-on-gcp#142 ·
-
Schwierigkeit 1/5 Unter einer Stunde Anfängerfreundlichkeit 90/100
StevenBlack/hosts#3256 ·
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 75/100
corsairdev/corsair#1764 ·
-
oblt-aw/detector/security
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 70/100