mirror of
https://github.com/github/codeql.git
synced 2026-05-02 20:25:13 +02:00
C#: Teach guards library about conditional assignments
For example, in
```
void M(object x)
{
var y = x != null ? "" : null;
if (y != null)
x.ToString();
}
```
the guard `y != null` implies that the guard `x != null` must be true.
This commit is contained in:
@@ -966,12 +966,17 @@ class TryStmt extends Stmt, @try_stmt {
|
||||
exists(ControlFlowElement mid |
|
||||
mid = getATriedElement() and
|
||||
not mid instanceof TryStmt and
|
||||
result = mid.getAChild() and
|
||||
mid.getEnclosingCallable() = result.getEnclosingCallable()
|
||||
result = getAChild(mid, mid.getEnclosingCallable())
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
pragma[noinline]
|
||||
private ControlFlowElement getAChild(ControlFlowElement cfe, Callable c) {
|
||||
result = cfe.getAChild() and
|
||||
c = result.getEnclosingCallable()
|
||||
}
|
||||
|
||||
/**
|
||||
* A `catch` clause within a `try` statement.
|
||||
*
|
||||
|
||||
@@ -2497,7 +2497,11 @@ module ControlFlow {
|
||||
class PreBasicBlock extends ControlFlowElement {
|
||||
PreBasicBlock() { startsBB(this) }
|
||||
|
||||
PreBasicBlock getASuccessor() { result = succ(this.getLastElement(), _) }
|
||||
PreBasicBlock getASuccessorByType(SuccessorType t) {
|
||||
result = succ(this.getLastElement(), any(Completion c | t.matchesCompletion(c)))
|
||||
}
|
||||
|
||||
PreBasicBlock getASuccessor() { result = this.getASuccessorByType(_) }
|
||||
|
||||
PreBasicBlock getAPredecessor() {
|
||||
result.getASuccessor() = this
|
||||
@@ -3099,6 +3103,12 @@ module ControlFlow {
|
||||
}
|
||||
}
|
||||
|
||||
pragma[noinline]
|
||||
private ControlFlowElement getAChild(ControlFlowElement cfe, Callable c) {
|
||||
result = cfe.getAChild() and
|
||||
c = result.getEnclosingCallable()
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets a descendant that belongs to the `finally` block of try statement
|
||||
* `try`.
|
||||
@@ -3108,8 +3118,7 @@ module ControlFlow {
|
||||
or
|
||||
exists(ControlFlowElement mid |
|
||||
mid = getAFinallyDescendant(try) and
|
||||
result = mid.getAChild() and
|
||||
mid.getEnclosingCallable() = result.getEnclosingCallable() and
|
||||
result = getAChild(mid, mid.getEnclosingCallable()) and
|
||||
not exists(TryStmt nestedTry |
|
||||
result = nestedTry.getFinally() and
|
||||
nestedTry != try
|
||||
|
||||
@@ -9,12 +9,31 @@ private import semmle.code.csharp.commons.ComparisonTest
|
||||
private import semmle.code.csharp.commons.StructuralComparison::Internal
|
||||
private import semmle.code.csharp.controlflow.BasicBlocks
|
||||
private import semmle.code.csharp.controlflow.Completion
|
||||
private import semmle.code.csharp.dataflow.Nullness
|
||||
private import semmle.code.csharp.frameworks.System
|
||||
|
||||
/** An abstract value. */
|
||||
abstract class AbstractValue extends TAbstractValue {
|
||||
/** Holds if taking the `s` branch out of `cfe` implies that `e` has this value. */
|
||||
abstract predicate branchImplies(ControlFlowElement cfe, ConditionalSuccessor s, Expr e);
|
||||
/** Holds if the `s` branch out of `cfe` is taken iff `e` has this value. */
|
||||
abstract predicate branch(ControlFlowElement cfe, ConditionalSuccessor s, Expr e);
|
||||
|
||||
/** Gets an abstract value that represents the dual of this value, if any. */
|
||||
abstract AbstractValue getDualValue();
|
||||
|
||||
/**
|
||||
* Gets an expression that has this abstract value. Two expressions that have the
|
||||
* same concrete value also have the same abstract value, but not necessarily the
|
||||
* other way around.
|
||||
*
|
||||
* Moreover, `e = this.getAnExpr() implies not e = this.getDualValue().getAnExpr()`.
|
||||
*/
|
||||
abstract Expr getAnExpr();
|
||||
|
||||
/**
|
||||
* Holds if this is a singleton abstract value. That is, two expressions that have
|
||||
* this abstract value also have the same concrete value.
|
||||
*/
|
||||
abstract predicate isSingleton();
|
||||
|
||||
/** Gets a textual representation of this abstract value. */
|
||||
abstract string toString();
|
||||
@@ -27,7 +46,7 @@ module AbstractValues {
|
||||
/** Gets the underlying Boolean value. */
|
||||
boolean getValue() { this = TBooleanValue(result) }
|
||||
|
||||
override predicate branchImplies(ControlFlowElement cfe, ConditionalSuccessor s, Expr e) {
|
||||
override predicate branch(ControlFlowElement cfe, ConditionalSuccessor s, Expr e) {
|
||||
s.(BooleanSuccessor).getValue() = this.getValue() and
|
||||
exists(BooleanCompletion c |
|
||||
s.matchesCompletion(c) |
|
||||
@@ -36,6 +55,44 @@ module AbstractValues {
|
||||
)
|
||||
}
|
||||
|
||||
override BooleanValue getDualValue() {
|
||||
result.getValue() = this.getValue().booleanNot()
|
||||
}
|
||||
|
||||
override Expr getAnExpr() {
|
||||
result.getType() instanceof BoolType and
|
||||
result.getValue() = this.getValue().toString()
|
||||
}
|
||||
|
||||
override predicate isSingleton() { any() }
|
||||
|
||||
override string toString() { result = this.getValue().toString() }
|
||||
}
|
||||
|
||||
/** An integer value. */
|
||||
class IntergerValue extends AbstractValue, TIntegerValue {
|
||||
/** Gets the underlying integer value. */
|
||||
int getValue() { this = TIntegerValue(result) }
|
||||
|
||||
override predicate branch(ControlFlowElement cfe, ConditionalSuccessor s, Expr e) {
|
||||
none()
|
||||
}
|
||||
|
||||
override BooleanValue getDualValue() {
|
||||
none()
|
||||
}
|
||||
|
||||
override Expr getAnExpr() {
|
||||
result.getValue().toInt() = this.getValue() and
|
||||
(
|
||||
result.getType() instanceof Enum
|
||||
or
|
||||
result.getType() instanceof IntegralType
|
||||
)
|
||||
}
|
||||
|
||||
override predicate isSingleton() { any() }
|
||||
|
||||
override string toString() { result = this.getValue().toString() }
|
||||
}
|
||||
|
||||
@@ -44,7 +101,7 @@ module AbstractValues {
|
||||
/** Holds if this value represents `null`. */
|
||||
predicate isNull() { this = TNullValue(true) }
|
||||
|
||||
override predicate branchImplies(ControlFlowElement cfe, ConditionalSuccessor s, Expr e) {
|
||||
override predicate branch(ControlFlowElement cfe, ConditionalSuccessor s, Expr e) {
|
||||
this = TNullValue(s.(NullnessSuccessor).getValue()) and
|
||||
exists(NullnessCompletion c |
|
||||
s.matchesCompletion(c) |
|
||||
@@ -53,6 +110,22 @@ module AbstractValues {
|
||||
)
|
||||
}
|
||||
|
||||
override NullValue getDualValue() {
|
||||
if this.isNull() then not result.isNull() else result.isNull()
|
||||
}
|
||||
|
||||
override DereferenceableExpr getAnExpr() {
|
||||
if this.isNull() then
|
||||
result instanceof AlwaysNullExpr
|
||||
else
|
||||
exists(Expr e |
|
||||
nonNullValue(e) |
|
||||
nonNullValueImplied*(e, result)
|
||||
)
|
||||
}
|
||||
|
||||
override predicate isSingleton() { this.isNull() }
|
||||
|
||||
override string toString() {
|
||||
if this.isNull() then result = "null" else result = "non-null"
|
||||
}
|
||||
@@ -66,7 +139,7 @@ module AbstractValues {
|
||||
/** Holds if this value represents a match. */
|
||||
predicate isMatch() { this = TMatchValue(_, true) }
|
||||
|
||||
override predicate branchImplies(ControlFlowElement cfe, ConditionalSuccessor s, Expr e) {
|
||||
override predicate branch(ControlFlowElement cfe, ConditionalSuccessor s, Expr e) {
|
||||
this = TMatchValue(_, s.(MatchingSuccessor).getValue()) and
|
||||
exists(MatchingCompletion c, SwitchStmt ss, CaseStmt cs |
|
||||
s.matchesCompletion(c) |
|
||||
@@ -77,6 +150,17 @@ module AbstractValues {
|
||||
)
|
||||
}
|
||||
|
||||
override MatchValue getDualValue() {
|
||||
result = any(MatchValue mv |
|
||||
mv.getCaseStmt() = this.getCaseStmt() and
|
||||
if this.isMatch() then not mv.isMatch() else mv.isMatch()
|
||||
)
|
||||
}
|
||||
|
||||
override Expr getAnExpr() { none() }
|
||||
|
||||
override predicate isSingleton() { none() }
|
||||
|
||||
override string toString() {
|
||||
exists(string s |
|
||||
s = this.getCaseStmt().toString() |
|
||||
@@ -90,7 +174,7 @@ module AbstractValues {
|
||||
/** Holds if this value represents an empty collection. */
|
||||
predicate isEmpty() { this = TEmptyCollectionValue(true) }
|
||||
|
||||
override predicate branchImplies(ControlFlowElement cfe, ConditionalSuccessor s, Expr e) {
|
||||
override predicate branch(ControlFlowElement cfe, ConditionalSuccessor s, Expr e) {
|
||||
this = TEmptyCollectionValue(s.(EmptinessSuccessor).getValue()) and
|
||||
exists(EmptinessCompletion c, ForeachStmt fs |
|
||||
s.matchesCompletion(c) |
|
||||
@@ -100,6 +184,14 @@ module AbstractValues {
|
||||
)
|
||||
}
|
||||
|
||||
override EmptyCollectionValue getDualValue() {
|
||||
if this.isEmpty() then not result.isEmpty() else result.isEmpty()
|
||||
}
|
||||
|
||||
override Expr getAnExpr() { none() }
|
||||
|
||||
override predicate isSingleton() { none() }
|
||||
|
||||
override string toString() {
|
||||
if this.isEmpty() then result = "empty" else result = "non-empty"
|
||||
}
|
||||
@@ -164,7 +256,7 @@ class DereferenceableExpr extends Expr {
|
||||
ct.getExpr() = result |
|
||||
ct.getAnArgument() = this and
|
||||
ct.getAnArgument() = e and
|
||||
nonNullValue(e) and
|
||||
e = any(NullValue nv | not nv.isNull()).getAnExpr() and
|
||||
ck = ct.getComparisonKind() and
|
||||
this != e and
|
||||
isNull = false and
|
||||
@@ -211,7 +303,7 @@ class DereferenceableExpr extends Expr {
|
||||
/**
|
||||
* Gets an expression that tests via matching whether this expression is `null`.
|
||||
*
|
||||
* If the returned element matches (`v.isMatch()`) or non-matches
|
||||
* If the returned expression matches (`v.isMatch()`) or non-matches
|
||||
* (`not v.isMatch()`), then this expression is guaranteed to be `null`
|
||||
* if `isNull` is true, and non-`null` if `isNull` is false.
|
||||
*
|
||||
@@ -447,6 +539,10 @@ module Internal {
|
||||
newtype TAbstractValue =
|
||||
TBooleanValue(boolean b) { b = true or b = false }
|
||||
or
|
||||
TIntegerValue(int i) {
|
||||
i = any(Expr e).getValue().toInt()
|
||||
}
|
||||
or
|
||||
TNullValue(boolean b) { b = true or b = false }
|
||||
or
|
||||
TMatchValue(CaseStmt cs, boolean b) { b = true or b = false }
|
||||
@@ -500,7 +596,7 @@ module Internal {
|
||||
bao.getAnOperand() = o and
|
||||
// The other operand must be provably non-null in order
|
||||
// for `only if` to hold
|
||||
nonNullValue(o) and
|
||||
o = any(NullValue nv | not nv.isNull()).getAnExpr() and
|
||||
e != o
|
||||
)
|
||||
}
|
||||
@@ -532,7 +628,7 @@ module Internal {
|
||||
this instanceof DereferenceableExpr and
|
||||
val = TNullValue(_)
|
||||
or
|
||||
val.branchImplies(_, _, this)
|
||||
val.branch(_, _, this)
|
||||
or
|
||||
asserts(_, this, val)
|
||||
}
|
||||
@@ -544,7 +640,7 @@ module Internal {
|
||||
predicate controls(BasicBlock bb, AbstractValue v) {
|
||||
exists(ControlFlowElement cfe, ConditionalSuccessor s, AbstractValue v0, Guard g |
|
||||
cfe.controlsBlock(bb, s) |
|
||||
v0.branchImplies(cfe, s, g) and
|
||||
v0.branch(cfe, s, g) and
|
||||
impliesSteps(g, v0, this, v)
|
||||
)
|
||||
}
|
||||
@@ -586,7 +682,7 @@ module Internal {
|
||||
predicate preControlsDirect(PreBasicBlocks::PreBasicBlock bb, AbstractValue v) {
|
||||
exists(PreBasicBlocks::ConditionBlock cb, ConditionalSuccessor s |
|
||||
cb.controls(bb, s) |
|
||||
v.branchImplies(cb.getLastElement(), s, this)
|
||||
v.branch(cb.getLastElement(), s, this)
|
||||
)
|
||||
}
|
||||
|
||||
@@ -597,6 +693,14 @@ module Internal {
|
||||
impliesSteps(g, v0, this, v)
|
||||
)
|
||||
}
|
||||
|
||||
/** Gets the successor block that is reached when this guard has abstract value `v`. */
|
||||
PreBasicBlocks::PreBasicBlock getConditionalSuccessor(AbstractValue v) {
|
||||
exists(PreBasicBlocks::ConditionBlock pred, ConditionalSuccessor s |
|
||||
v.branch(pred.getLastElement(), s, this) |
|
||||
result = pred.getASuccessorByType(s)
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -699,6 +803,183 @@ module Internal {
|
||||
)
|
||||
}
|
||||
|
||||
/**
|
||||
* Holds if the evaluation of `guard` to `vGuard` implies that `def` is assigned
|
||||
* expression `e`.
|
||||
*/
|
||||
private predicate conditionalAssign(Guard guard, AbstractValue vGuard, PreSsa::Definition def, Expr e) {
|
||||
// For example:
|
||||
// v = guard ? e : x;
|
||||
exists(ConditionalExpr c |
|
||||
c = def.getDefinition().getSource() |
|
||||
guard = c.getCondition() and
|
||||
vGuard = any(BooleanValue bv |
|
||||
bv.getValue() = true and
|
||||
e = c.getThen()
|
||||
or
|
||||
bv.getValue() = false and
|
||||
e = c.getElse()
|
||||
)
|
||||
)
|
||||
or
|
||||
exists(PreSsa::Definition upd, PreBasicBlocks::PreBasicBlock bbGuard |
|
||||
e = upd.getDefinition().getSource() and
|
||||
upd = def.getAPhiInput() and
|
||||
guard.preControlsDirect(upd.getBasicBlock(), vGuard) and
|
||||
bbGuard.getAnElement() = guard and
|
||||
bbGuard.strictlyDominates(def.getBasicBlock()) and
|
||||
not guard.preControlsDirect(def.getBasicBlock(), vGuard) and
|
||||
forall(PreSsa::Definition other |
|
||||
other != upd and other = def.getAPhiInput() |
|
||||
// For example:
|
||||
// if (guard)
|
||||
// upd = a;
|
||||
// else
|
||||
// other = b;
|
||||
// def = phi(upd, other)
|
||||
guard.preControlsDirect(other.getBasicBlock(), vGuard.getDualValue())
|
||||
or
|
||||
// For example:
|
||||
// other = a;
|
||||
// if (guard)
|
||||
// upd = b;
|
||||
// def = phi(other, upd)
|
||||
other.getBasicBlock().dominates(bbGuard) and
|
||||
not PreSsa::ssaDefReachesEndOfBlock(guard.getConditionalSuccessor(vGuard), other, _)
|
||||
)
|
||||
)
|
||||
}
|
||||
|
||||
/**
|
||||
* Holds if the evaluation of `guard` to `vGuard` implies that `def` is assigned
|
||||
* an expression with abstract value `vDef`.
|
||||
*/
|
||||
private predicate conditionalAssignVal(Expr guard, AbstractValue vGuard, PreSsa::Definition def, AbstractValue vDef) {
|
||||
conditionalAssign(guard, vGuard, def, vDef.getAnExpr())
|
||||
}
|
||||
|
||||
private predicate relevantEq(PreSsa::Definition def, AbstractValue v) {
|
||||
conditionalAssignVal(_, _, def, v)
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets an expression that directly tests whether expression `e1` is equal
|
||||
* to expression `e2`.
|
||||
*
|
||||
* If the returned expression evaluates to `v`, then expression `e1` is
|
||||
* guaranteed to be equal to `e2`, otherwise it is guaranteed to not be
|
||||
* equal to `e2`.
|
||||
*
|
||||
* For example, if the expression `x != ""` evaluates to `false` then the
|
||||
* expression `x` is guaranteed to be equal to `""`.
|
||||
*/
|
||||
private Expr getABooleanEqualityCheck(Expr e1, BooleanValue v, Expr e2) {
|
||||
exists(boolean branch |
|
||||
branch = v.getValue() |
|
||||
exists(ComparisonTest ct, ComparisonKind ck |
|
||||
ct.getExpr() = result and
|
||||
ct.getAnArgument() = e1 and
|
||||
ct.getAnArgument() = e2 and
|
||||
e2 != e1 and
|
||||
ck = ct.getComparisonKind() |
|
||||
ck.isEquality() and branch = true
|
||||
or
|
||||
ck.isInequality() and branch = false
|
||||
)
|
||||
or
|
||||
result = any(IsExpr ie |
|
||||
ie.getExpr() = e1 and
|
||||
e2 = ie.(IsConstantExpr).getConstant() and
|
||||
branch = true
|
||||
)
|
||||
)
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets an expression that tests via matching whether expression `e1` is equal
|
||||
* to expression `e2`.
|
||||
*
|
||||
* If the returned expression matches (`v.isMatch()`), then expression `e1` is
|
||||
* guaranteed to be equal to `e2`. If the returned expression non-matches
|
||||
* (`not v.isMatch()`), then this expression is guaranteed to not be equal to `e2`.
|
||||
*
|
||||
* For example, if the case statement `case ""` matches in
|
||||
*
|
||||
* ```
|
||||
* switch (o)
|
||||
* {
|
||||
* case "":
|
||||
* return s;
|
||||
* default:
|
||||
* return "";
|
||||
* }
|
||||
* ```
|
||||
*
|
||||
* then `o` is guaranteed to be equal to `""`.
|
||||
*/
|
||||
private Expr getAMatchingEqualityCheck(Expr e1, MatchValue v, Expr e2) {
|
||||
exists(SwitchStmt ss, ConstCase cc |
|
||||
cc = v.getCaseStmt() |
|
||||
e1 = ss.getCondition() and
|
||||
result = e1 and
|
||||
cc = ss.getACase() and
|
||||
e2 = cc.getExpr() and
|
||||
v.isMatch()
|
||||
)
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets an expression that tests whether expression `e1` is equal to
|
||||
* expression `e2`.
|
||||
*
|
||||
* If the returned expression has abstract value `v`, then expression `e1` is
|
||||
* guaranteed to be equal to `e2`, and if the returned expression has abstract
|
||||
* value `v.getDualValue()`, then this expression is guaranteed to be
|
||||
* non-equal to `e`.
|
||||
*
|
||||
* For example, if the expression `x != ""` evaluates to `false` then the
|
||||
* expression `x` is guaranteed to be equal to `""`.
|
||||
*/
|
||||
Expr getAnEqualityCheck(Expr e1, AbstractValue v, Expr e2) {
|
||||
result = getABooleanEqualityCheck(e1, v, e2)
|
||||
or
|
||||
result = getAMatchingEqualityCheck(e1, v, e2)
|
||||
}
|
||||
|
||||
private Expr getAnEqualityCheckVal(Expr e, AbstractValue v, AbstractValue vExpr) {
|
||||
result = getAnEqualityCheck(e, v, vExpr.getAnExpr())
|
||||
}
|
||||
|
||||
/**
|
||||
* Holds if the evaluation of `guard` to `vGuard` implies that `def` does not
|
||||
* have the value `vDef`.
|
||||
*/
|
||||
private predicate guardImpliesNotEqual(Expr guard, AbstractValue vGuard, PreSsa::Definition def, AbstractValue vDef) {
|
||||
relevantEq(def, vDef) and
|
||||
exists(DereferenceableExpr de |
|
||||
de = def.getARead() |
|
||||
// For example:
|
||||
// if (de == null); vGuard = TBooleanValue(false); vDef = TNullValue(true)
|
||||
// but not
|
||||
// if (de == "abc"); vGuard = TBooleanValue(false); vDef = TNullValue(false)
|
||||
guard = getAnEqualityCheckVal(de, vGuard.getDualValue(), vDef) and
|
||||
vDef.isSingleton()
|
||||
or
|
||||
// For example:
|
||||
// if (de != null); vGuard = TBooleanValue(true); vDef = TNullValue(true)
|
||||
// or
|
||||
// if (de == null); vGuard = TBooleanValue(true); vDef = TNullValue(false)
|
||||
exists(NullValue nv |
|
||||
guard = de.getANullCheck(vGuard, any(boolean b | nv = TNullValue(b))) |
|
||||
vDef = nv.getDualValue()
|
||||
)
|
||||
or
|
||||
// For example:
|
||||
// if (de == null); vGuard = TBooleanValue(true); vDef = TNullValue(false)
|
||||
guard = getAnEqualityCheckVal(de, vGuard, vDef.getDualValue())
|
||||
)
|
||||
}
|
||||
|
||||
/**
|
||||
* A helper class for calculating structurally equal access/call expressions.
|
||||
*/
|
||||
@@ -879,6 +1160,13 @@ module Internal {
|
||||
v1 = g1.getAValue() and
|
||||
v2 = v1
|
||||
)
|
||||
or
|
||||
exists(PreSsa::Definition def, AbstractValue v |
|
||||
// If `def = g2 ? v : ...` or `def = g2 ? ... : v` then a guard `g1`
|
||||
// proving `def != v` ensures that `g2` evaluates to `b2`.
|
||||
conditionalAssignVal(g2, v2.getDualValue(), def, v) and
|
||||
guardImpliesNotEqual(g1, v1, def, v)
|
||||
)
|
||||
}
|
||||
|
||||
cached
|
||||
|
||||
@@ -142,7 +142,7 @@ private predicate potentialNullDereferenceAt(BasicBlock bb, int i, Ssa::Definiti
|
||||
*/
|
||||
private ControlFlowElement getANullCheck(Ssa::Definition def, SuccessorTypes::ConditionalSuccessor s, NullValue nv) {
|
||||
exists(Expr e, G::AbstractValue v |
|
||||
v.branchImplies(result, s, e) |
|
||||
v.branch(result, s, e) |
|
||||
exprImpliesSsaDef(e, v, def, nv)
|
||||
)
|
||||
}
|
||||
|
||||
@@ -3,12 +3,16 @@
|
||||
| Assert.cs:39:27:39:27 | access to local variable s | Assert.cs:38:23:38:31 | ... != ... | Assert.cs:38:23:38:23 | access to local variable s | true |
|
||||
| Assert.cs:46:27:46:27 | access to local variable s | Assert.cs:45:24:45:32 | ... != ... | Assert.cs:45:24:45:24 | access to local variable s | false |
|
||||
| Assert.cs:53:27:53:27 | access to local variable s | Assert.cs:52:24:52:32 | ... == ... | Assert.cs:52:24:52:24 | access to local variable s | false |
|
||||
| Assert.cs:59:36:59:36 | access to parameter b | Assert.cs:58:20:58:20 | access to parameter b | Assert.cs:58:20:58:20 | access to parameter b | false |
|
||||
| Assert.cs:60:27:60:27 | access to local variable s | Assert.cs:59:23:59:31 | ... != ... | Assert.cs:59:23:59:23 | access to local variable s | true |
|
||||
| Assert.cs:60:27:60:27 | access to local variable s | Assert.cs:59:23:59:36 | ... && ... | Assert.cs:59:23:59:23 | access to local variable s | true |
|
||||
| Assert.cs:66:37:66:37 | access to parameter b | Assert.cs:65:20:65:20 | access to parameter b | Assert.cs:65:20:65:20 | access to parameter b | false |
|
||||
| Assert.cs:67:27:67:27 | access to local variable s | Assert.cs:66:24:66:32 | ... == ... | Assert.cs:66:24:66:24 | access to local variable s | false |
|
||||
| Assert.cs:67:27:67:27 | access to local variable s | Assert.cs:66:24:66:37 | ... \|\| ... | Assert.cs:66:24:66:24 | access to local variable s | false |
|
||||
| Assert.cs:73:36:73:36 | access to parameter b | Assert.cs:72:20:72:20 | access to parameter b | Assert.cs:72:20:72:20 | access to parameter b | true |
|
||||
| Assert.cs:74:27:74:27 | access to local variable s | Assert.cs:73:23:73:31 | ... == ... | Assert.cs:73:23:73:23 | access to local variable s | true |
|
||||
| Assert.cs:74:27:74:27 | access to local variable s | Assert.cs:73:23:73:36 | ... && ... | Assert.cs:73:23:73:23 | access to local variable s | true |
|
||||
| Assert.cs:80:37:80:37 | access to parameter b | Assert.cs:79:20:79:20 | access to parameter b | Assert.cs:79:20:79:20 | access to parameter b | true |
|
||||
| Assert.cs:81:27:81:27 | access to local variable s | Assert.cs:80:24:80:32 | ... != ... | Assert.cs:80:24:80:24 | access to local variable s | false |
|
||||
| Assert.cs:81:27:81:27 | access to local variable s | Assert.cs:80:24:80:37 | ... \|\| ... | Assert.cs:80:24:80:24 | access to local variable s | false |
|
||||
| Guards.cs:12:13:12:13 | access to parameter s | Guards.cs:10:16:10:24 | ... == ... | Guards.cs:10:16:10:16 | access to parameter s | false |
|
||||
|
||||
@@ -10,18 +10,22 @@
|
||||
| Assert.cs:46:27:46:27 | access to local variable s | Assert.cs:45:24:45:32 | ... != ... | Assert.cs:45:24:45:24 | access to local variable s | false |
|
||||
| Assert.cs:53:27:53:27 | access to local variable s | Assert.cs:52:24:52:24 | access to local variable s | Assert.cs:52:24:52:24 | access to local variable s | non-null |
|
||||
| Assert.cs:53:27:53:27 | access to local variable s | Assert.cs:52:24:52:32 | ... == ... | Assert.cs:52:24:52:24 | access to local variable s | false |
|
||||
| Assert.cs:59:36:59:36 | access to parameter b | Assert.cs:58:20:58:20 | access to parameter b | Assert.cs:58:20:58:20 | access to parameter b | false |
|
||||
| Assert.cs:59:36:59:36 | access to parameter b | Assert.cs:58:20:58:32 | ... ? ... : ... | Assert.cs:58:20:58:20 | access to parameter b | non-null |
|
||||
| Assert.cs:60:27:60:27 | access to local variable s | Assert.cs:59:23:59:23 | access to local variable s | Assert.cs:59:23:59:23 | access to local variable s | non-null |
|
||||
| Assert.cs:60:27:60:27 | access to local variable s | Assert.cs:59:23:59:31 | ... != ... | Assert.cs:59:23:59:23 | access to local variable s | true |
|
||||
| Assert.cs:60:27:60:27 | access to local variable s | Assert.cs:59:23:59:36 | ... && ... | Assert.cs:59:23:59:23 | access to local variable s | true |
|
||||
| Assert.cs:66:37:66:37 | access to parameter b | Assert.cs:65:20:65:20 | access to parameter b | Assert.cs:65:20:65:20 | access to parameter b | false |
|
||||
| Assert.cs:66:37:66:37 | access to parameter b | Assert.cs:65:20:65:32 | ... ? ... : ... | Assert.cs:65:20:65:20 | access to parameter b | non-null |
|
||||
| Assert.cs:67:27:67:27 | access to local variable s | Assert.cs:66:24:66:24 | access to local variable s | Assert.cs:66:24:66:24 | access to local variable s | non-null |
|
||||
| Assert.cs:67:27:67:27 | access to local variable s | Assert.cs:66:24:66:32 | ... == ... | Assert.cs:66:24:66:24 | access to local variable s | false |
|
||||
| Assert.cs:67:27:67:27 | access to local variable s | Assert.cs:66:24:66:37 | ... \|\| ... | Assert.cs:66:24:66:24 | access to local variable s | false |
|
||||
| Assert.cs:73:36:73:36 | access to parameter b | Assert.cs:72:20:72:20 | access to parameter b | Assert.cs:72:20:72:20 | access to parameter b | true |
|
||||
| Assert.cs:73:36:73:36 | access to parameter b | Assert.cs:72:20:72:32 | ... ? ... : ... | Assert.cs:72:20:72:20 | access to parameter b | null |
|
||||
| Assert.cs:74:27:74:27 | access to local variable s | Assert.cs:73:23:73:23 | access to local variable s | Assert.cs:73:23:73:23 | access to local variable s | null |
|
||||
| Assert.cs:74:27:74:27 | access to local variable s | Assert.cs:73:23:73:31 | ... == ... | Assert.cs:73:23:73:23 | access to local variable s | true |
|
||||
| Assert.cs:74:27:74:27 | access to local variable s | Assert.cs:73:23:73:36 | ... && ... | Assert.cs:73:23:73:23 | access to local variable s | true |
|
||||
| Assert.cs:80:37:80:37 | access to parameter b | Assert.cs:79:20:79:20 | access to parameter b | Assert.cs:79:20:79:20 | access to parameter b | true |
|
||||
| Assert.cs:80:37:80:37 | access to parameter b | Assert.cs:79:20:79:32 | ... ? ... : ... | Assert.cs:79:20:79:20 | access to parameter b | null |
|
||||
| Assert.cs:81:27:81:27 | access to local variable s | Assert.cs:80:24:80:24 | access to local variable s | Assert.cs:80:24:80:24 | access to local variable s | null |
|
||||
| Assert.cs:81:27:81:27 | access to local variable s | Assert.cs:80:24:80:32 | ... != ... | Assert.cs:80:24:80:24 | access to local variable s | false |
|
||||
|
||||
@@ -2,7 +2,9 @@
|
||||
| Assert.cs:9:16:9:32 | String s = ... | null | Assert.cs:9:16:9:16 | access to local variable s | null |
|
||||
| Assert.cs:10:22:10:22 | access to local variable s | non-null | Assert.cs:9:20:9:32 | ... ? ... : ... | non-null |
|
||||
| Assert.cs:10:22:10:22 | access to local variable s | null | Assert.cs:9:20:9:32 | ... ? ... : ... | null |
|
||||
| Assert.cs:10:22:10:30 | ... != ... | false | Assert.cs:9:20:9:20 | access to parameter b | true |
|
||||
| Assert.cs:10:22:10:30 | ... != ... | false | Assert.cs:10:22:10:22 | access to local variable s | null |
|
||||
| Assert.cs:10:22:10:30 | ... != ... | true | Assert.cs:9:20:9:20 | access to parameter b | false |
|
||||
| Assert.cs:10:22:10:30 | ... != ... | true | Assert.cs:10:22:10:22 | access to local variable s | non-null |
|
||||
| Assert.cs:11:27:11:27 | access to local variable s | non-null | Assert.cs:9:20:9:32 | ... ? ... : ... | non-null |
|
||||
| Assert.cs:11:27:11:27 | access to local variable s | null | Assert.cs:9:20:9:32 | ... ? ... : ... | null |
|
||||
@@ -22,7 +24,9 @@
|
||||
| Assert.cs:30:16:30:32 | String s = ... | null | Assert.cs:30:16:30:16 | access to local variable s | null |
|
||||
| Assert.cs:31:23:31:23 | access to local variable s | non-null | Assert.cs:30:20:30:32 | ... ? ... : ... | non-null |
|
||||
| Assert.cs:31:23:31:23 | access to local variable s | null | Assert.cs:30:20:30:32 | ... ? ... : ... | null |
|
||||
| Assert.cs:31:23:31:31 | ... == ... | false | Assert.cs:30:20:30:20 | access to parameter b | false |
|
||||
| Assert.cs:31:23:31:31 | ... == ... | false | Assert.cs:31:23:31:23 | access to local variable s | non-null |
|
||||
| Assert.cs:31:23:31:31 | ... == ... | true | Assert.cs:30:20:30:20 | access to parameter b | true |
|
||||
| Assert.cs:31:23:31:31 | ... == ... | true | Assert.cs:31:23:31:23 | access to local variable s | null |
|
||||
| Assert.cs:32:27:32:27 | access to local variable s | non-null | Assert.cs:30:20:30:32 | ... ? ... : ... | non-null |
|
||||
| Assert.cs:32:27:32:27 | access to local variable s | null | Assert.cs:30:20:30:32 | ... ? ... : ... | null |
|
||||
@@ -30,7 +34,9 @@
|
||||
| Assert.cs:37:16:37:32 | String s = ... | null | Assert.cs:37:16:37:16 | access to local variable s | null |
|
||||
| Assert.cs:38:23:38:23 | access to local variable s | non-null | Assert.cs:37:20:37:32 | ... ? ... : ... | non-null |
|
||||
| Assert.cs:38:23:38:23 | access to local variable s | null | Assert.cs:37:20:37:32 | ... ? ... : ... | null |
|
||||
| Assert.cs:38:23:38:31 | ... != ... | false | Assert.cs:37:20:37:20 | access to parameter b | true |
|
||||
| Assert.cs:38:23:38:31 | ... != ... | false | Assert.cs:38:23:38:23 | access to local variable s | null |
|
||||
| Assert.cs:38:23:38:31 | ... != ... | true | Assert.cs:37:20:37:20 | access to parameter b | false |
|
||||
| Assert.cs:38:23:38:31 | ... != ... | true | Assert.cs:38:23:38:23 | access to local variable s | non-null |
|
||||
| Assert.cs:39:27:39:27 | access to local variable s | non-null | Assert.cs:37:20:37:32 | ... ? ... : ... | non-null |
|
||||
| Assert.cs:39:27:39:27 | access to local variable s | null | Assert.cs:37:20:37:32 | ... ? ... : ... | null |
|
||||
@@ -38,7 +44,9 @@
|
||||
| Assert.cs:44:16:44:32 | String s = ... | null | Assert.cs:44:16:44:16 | access to local variable s | null |
|
||||
| Assert.cs:45:24:45:24 | access to local variable s | non-null | Assert.cs:44:20:44:32 | ... ? ... : ... | non-null |
|
||||
| Assert.cs:45:24:45:24 | access to local variable s | null | Assert.cs:44:20:44:32 | ... ? ... : ... | null |
|
||||
| Assert.cs:45:24:45:32 | ... != ... | false | Assert.cs:44:20:44:20 | access to parameter b | true |
|
||||
| Assert.cs:45:24:45:32 | ... != ... | false | Assert.cs:45:24:45:24 | access to local variable s | null |
|
||||
| Assert.cs:45:24:45:32 | ... != ... | true | Assert.cs:44:20:44:20 | access to parameter b | false |
|
||||
| Assert.cs:45:24:45:32 | ... != ... | true | Assert.cs:45:24:45:24 | access to local variable s | non-null |
|
||||
| Assert.cs:46:27:46:27 | access to local variable s | non-null | Assert.cs:44:20:44:32 | ... ? ... : ... | non-null |
|
||||
| Assert.cs:46:27:46:27 | access to local variable s | null | Assert.cs:44:20:44:32 | ... ? ... : ... | null |
|
||||
@@ -46,7 +54,9 @@
|
||||
| Assert.cs:51:16:51:32 | String s = ... | null | Assert.cs:51:16:51:16 | access to local variable s | null |
|
||||
| Assert.cs:52:24:52:24 | access to local variable s | non-null | Assert.cs:51:20:51:32 | ... ? ... : ... | non-null |
|
||||
| Assert.cs:52:24:52:24 | access to local variable s | null | Assert.cs:51:20:51:32 | ... ? ... : ... | null |
|
||||
| Assert.cs:52:24:52:32 | ... == ... | false | Assert.cs:51:20:51:20 | access to parameter b | false |
|
||||
| Assert.cs:52:24:52:32 | ... == ... | false | Assert.cs:52:24:52:24 | access to local variable s | non-null |
|
||||
| Assert.cs:52:24:52:32 | ... == ... | true | Assert.cs:51:20:51:20 | access to parameter b | true |
|
||||
| Assert.cs:52:24:52:32 | ... == ... | true | Assert.cs:52:24:52:24 | access to local variable s | null |
|
||||
| Assert.cs:53:27:53:27 | access to local variable s | non-null | Assert.cs:51:20:51:32 | ... ? ... : ... | non-null |
|
||||
| Assert.cs:53:27:53:27 | access to local variable s | null | Assert.cs:51:20:51:32 | ... ? ... : ... | null |
|
||||
@@ -54,7 +64,9 @@
|
||||
| Assert.cs:58:16:58:32 | String s = ... | null | Assert.cs:58:16:58:16 | access to local variable s | null |
|
||||
| Assert.cs:59:23:59:23 | access to local variable s | non-null | Assert.cs:58:20:58:32 | ... ? ... : ... | non-null |
|
||||
| Assert.cs:59:23:59:23 | access to local variable s | null | Assert.cs:58:20:58:32 | ... ? ... : ... | null |
|
||||
| Assert.cs:59:23:59:31 | ... != ... | false | Assert.cs:58:20:58:20 | access to parameter b | true |
|
||||
| Assert.cs:59:23:59:31 | ... != ... | false | Assert.cs:59:23:59:23 | access to local variable s | null |
|
||||
| Assert.cs:59:23:59:31 | ... != ... | true | Assert.cs:58:20:58:20 | access to parameter b | false |
|
||||
| Assert.cs:59:23:59:31 | ... != ... | true | Assert.cs:59:23:59:23 | access to local variable s | non-null |
|
||||
| Assert.cs:59:23:59:36 | ... && ... | true | Assert.cs:59:23:59:31 | ... != ... | true |
|
||||
| Assert.cs:59:23:59:36 | ... && ... | true | Assert.cs:59:36:59:36 | access to parameter b | true |
|
||||
@@ -64,7 +76,9 @@
|
||||
| Assert.cs:65:16:65:32 | String s = ... | null | Assert.cs:65:16:65:16 | access to local variable s | null |
|
||||
| Assert.cs:66:24:66:24 | access to local variable s | non-null | Assert.cs:65:20:65:32 | ... ? ... : ... | non-null |
|
||||
| Assert.cs:66:24:66:24 | access to local variable s | null | Assert.cs:65:20:65:32 | ... ? ... : ... | null |
|
||||
| Assert.cs:66:24:66:32 | ... == ... | false | Assert.cs:65:20:65:20 | access to parameter b | false |
|
||||
| Assert.cs:66:24:66:32 | ... == ... | false | Assert.cs:66:24:66:24 | access to local variable s | non-null |
|
||||
| Assert.cs:66:24:66:32 | ... == ... | true | Assert.cs:65:20:65:20 | access to parameter b | true |
|
||||
| Assert.cs:66:24:66:32 | ... == ... | true | Assert.cs:66:24:66:24 | access to local variable s | null |
|
||||
| Assert.cs:66:24:66:37 | ... \|\| ... | false | Assert.cs:66:24:66:32 | ... == ... | false |
|
||||
| Assert.cs:66:24:66:37 | ... \|\| ... | false | Assert.cs:66:37:66:37 | access to parameter b | false |
|
||||
@@ -74,7 +88,9 @@
|
||||
| Assert.cs:72:16:72:32 | String s = ... | null | Assert.cs:72:16:72:16 | access to local variable s | null |
|
||||
| Assert.cs:73:23:73:23 | access to local variable s | non-null | Assert.cs:72:20:72:32 | ... ? ... : ... | non-null |
|
||||
| Assert.cs:73:23:73:23 | access to local variable s | null | Assert.cs:72:20:72:32 | ... ? ... : ... | null |
|
||||
| Assert.cs:73:23:73:31 | ... == ... | false | Assert.cs:72:20:72:20 | access to parameter b | false |
|
||||
| Assert.cs:73:23:73:31 | ... == ... | false | Assert.cs:73:23:73:23 | access to local variable s | non-null |
|
||||
| Assert.cs:73:23:73:31 | ... == ... | true | Assert.cs:72:20:72:20 | access to parameter b | true |
|
||||
| Assert.cs:73:23:73:31 | ... == ... | true | Assert.cs:73:23:73:23 | access to local variable s | null |
|
||||
| Assert.cs:73:23:73:36 | ... && ... | true | Assert.cs:73:23:73:31 | ... == ... | true |
|
||||
| Assert.cs:73:23:73:36 | ... && ... | true | Assert.cs:73:36:73:36 | access to parameter b | true |
|
||||
@@ -84,7 +100,9 @@
|
||||
| Assert.cs:79:16:79:32 | String s = ... | null | Assert.cs:79:16:79:16 | access to local variable s | null |
|
||||
| Assert.cs:80:24:80:24 | access to local variable s | non-null | Assert.cs:79:20:79:32 | ... ? ... : ... | non-null |
|
||||
| Assert.cs:80:24:80:24 | access to local variable s | null | Assert.cs:79:20:79:32 | ... ? ... : ... | null |
|
||||
| Assert.cs:80:24:80:32 | ... != ... | false | Assert.cs:79:20:79:20 | access to parameter b | true |
|
||||
| Assert.cs:80:24:80:32 | ... != ... | false | Assert.cs:80:24:80:24 | access to local variable s | null |
|
||||
| Assert.cs:80:24:80:32 | ... != ... | true | Assert.cs:79:20:79:20 | access to parameter b | false |
|
||||
| Assert.cs:80:24:80:32 | ... != ... | true | Assert.cs:80:24:80:24 | access to local variable s | non-null |
|
||||
| Assert.cs:80:24:80:37 | ... \|\| ... | false | Assert.cs:80:24:80:32 | ... != ... | false |
|
||||
| Assert.cs:80:24:80:37 | ... \|\| ... | false | Assert.cs:80:37:80:37 | access to parameter b | false |
|
||||
|
||||
@@ -57,7 +57,7 @@ public class D
|
||||
|
||||
var o5 = (o4 != null) ? "" : null;
|
||||
if (o5 != null)
|
||||
o4.ToString(); // GOOD (false positive)
|
||||
o4.ToString(); // GOOD
|
||||
if (o4 != null)
|
||||
o5.ToString(); // GOOD (false positive)
|
||||
|
||||
@@ -343,7 +343,7 @@ public class D
|
||||
msg += "foobar";
|
||||
throw new Exception(msg);
|
||||
}
|
||||
obj.ToString(); // GOOD (false positive)
|
||||
obj.ToString(); // GOOD
|
||||
}
|
||||
|
||||
public void LoopCorr(int iters)
|
||||
|
||||
233
csharp/ql/test/query-tests/Nullness/EqualityCheck.expected
Normal file
233
csharp/ql/test/query-tests/Nullness/EqualityCheck.expected
Normal file
@@ -0,0 +1,233 @@
|
||||
| Assert.cs:10:22:10:30 | ... != ... | false | Assert.cs:10:22:10:22 | access to local variable s | Assert.cs:10:27:10:30 | null |
|
||||
| Assert.cs:10:22:10:30 | ... != ... | false | Assert.cs:10:27:10:30 | null | Assert.cs:10:22:10:22 | access to local variable s |
|
||||
| Assert.cs:22:23:22:31 | ... == ... | true | Assert.cs:22:23:22:23 | access to local variable s | Assert.cs:22:28:22:31 | null |
|
||||
| Assert.cs:22:23:22:31 | ... == ... | true | Assert.cs:22:28:22:31 | null | Assert.cs:22:23:22:23 | access to local variable s |
|
||||
| Assert.cs:26:23:26:31 | ... != ... | false | Assert.cs:26:23:26:23 | access to local variable s | Assert.cs:26:28:26:31 | null |
|
||||
| Assert.cs:26:23:26:31 | ... != ... | false | Assert.cs:26:28:26:31 | null | Assert.cs:26:23:26:23 | access to local variable s |
|
||||
| Assert.cs:30:24:30:32 | ... != ... | false | Assert.cs:30:24:30:24 | access to local variable s | Assert.cs:30:29:30:32 | null |
|
||||
| Assert.cs:30:24:30:32 | ... != ... | false | Assert.cs:30:29:30:32 | null | Assert.cs:30:24:30:24 | access to local variable s |
|
||||
| Assert.cs:34:24:34:32 | ... == ... | true | Assert.cs:34:24:34:24 | access to local variable s | Assert.cs:34:29:34:32 | null |
|
||||
| Assert.cs:34:24:34:32 | ... == ... | true | Assert.cs:34:29:34:32 | null | Assert.cs:34:24:34:24 | access to local variable s |
|
||||
| Assert.cs:38:23:38:31 | ... != ... | false | Assert.cs:38:23:38:23 | access to local variable s | Assert.cs:38:28:38:31 | null |
|
||||
| Assert.cs:38:23:38:31 | ... != ... | false | Assert.cs:38:28:38:31 | null | Assert.cs:38:23:38:23 | access to local variable s |
|
||||
| Assert.cs:42:24:42:32 | ... == ... | true | Assert.cs:42:24:42:24 | access to local variable s | Assert.cs:42:29:42:32 | null |
|
||||
| Assert.cs:42:24:42:32 | ... == ... | true | Assert.cs:42:29:42:32 | null | Assert.cs:42:24:42:24 | access to local variable s |
|
||||
| Assert.cs:46:23:46:31 | ... == ... | true | Assert.cs:46:23:46:23 | access to local variable s | Assert.cs:46:28:46:31 | null |
|
||||
| Assert.cs:46:23:46:31 | ... == ... | true | Assert.cs:46:28:46:31 | null | Assert.cs:46:23:46:23 | access to local variable s |
|
||||
| Assert.cs:50:24:50:32 | ... != ... | false | Assert.cs:50:24:50:24 | access to local variable s | Assert.cs:50:29:50:32 | null |
|
||||
| Assert.cs:50:24:50:32 | ... != ... | false | Assert.cs:50:29:50:32 | null | Assert.cs:50:24:50:24 | access to local variable s |
|
||||
| B.cs:12:13:12:32 | call to operator == | true | B.cs:12:13:12:24 | access to local variable eqCallAlways | B.cs:12:29:12:32 | null |
|
||||
| B.cs:12:13:12:32 | call to operator == | true | B.cs:12:29:12:32 | null | B.cs:12:13:12:24 | access to local variable eqCallAlways |
|
||||
| B.cs:15:13:15:22 | call to operator != | false | B.cs:15:13:15:14 | access to local variable b2 | B.cs:15:19:15:22 | null |
|
||||
| B.cs:15:13:15:22 | call to operator != | false | B.cs:15:19:15:22 | null | B.cs:15:13:15:14 | access to local variable b2 |
|
||||
| B.cs:18:13:18:22 | call to operator == | true | B.cs:18:13:18:14 | access to local variable b3 | B.cs:18:19:18:22 | null |
|
||||
| B.cs:18:13:18:22 | call to operator == | true | B.cs:18:19:18:22 | null | B.cs:18:13:18:14 | access to local variable b3 |
|
||||
| B.cs:22:13:22:33 | call to operator != | false | B.cs:22:13:22:25 | access to local variable neqCallAlways | B.cs:22:30:22:33 | null |
|
||||
| B.cs:22:13:22:33 | call to operator != | false | B.cs:22:30:22:33 | null | B.cs:22:13:22:25 | access to local variable neqCallAlways |
|
||||
| B.cs:29:16:29:36 | call to method Equals | true | B.cs:29:30:29:31 | access to parameter b1 | B.cs:29:34:29:35 | access to parameter b2 |
|
||||
| B.cs:29:16:29:36 | call to method Equals | true | B.cs:29:34:29:35 | access to parameter b2 | B.cs:29:30:29:31 | access to parameter b1 |
|
||||
| B.cs:34:18:34:25 | call to operator == | true | B.cs:34:18:34:19 | access to parameter b1 | B.cs:34:24:34:25 | access to parameter b2 |
|
||||
| B.cs:34:18:34:25 | call to operator == | true | B.cs:34:24:34:25 | access to parameter b2 | B.cs:34:18:34:19 | access to parameter b1 |
|
||||
| B.cs:53:17:53:33 | ... != ... | false | B.cs:53:17:53:25 | (...) ... | B.cs:53:30:53:33 | null |
|
||||
| B.cs:53:17:53:33 | ... != ... | false | B.cs:53:30:53:33 | null | B.cs:53:17:53:25 | (...) ... |
|
||||
| B.cs:55:26:55:36 | call to method Equals | true | B.cs:55:26:55:26 | access to local variable o | B.cs:55:35:55:35 | access to local variable o |
|
||||
| B.cs:55:26:55:36 | call to method Equals | true | B.cs:55:35:55:35 | access to local variable o | B.cs:55:26:55:26 | access to local variable o |
|
||||
| C.cs:11:19:11:27 | ... == ... | true | C.cs:11:19:11:19 | access to local variable o | C.cs:11:24:11:27 | null |
|
||||
| C.cs:11:19:11:27 | ... == ... | true | C.cs:11:24:11:27 | null | C.cs:11:19:11:19 | access to local variable o |
|
||||
| C.cs:16:15:16:23 | ... != ... | false | C.cs:16:15:16:15 | access to local variable o | C.cs:16:20:16:23 | null |
|
||||
| C.cs:16:15:16:23 | ... != ... | false | C.cs:16:20:16:23 | null | C.cs:16:15:16:15 | access to local variable o |
|
||||
| C.cs:24:13:24:21 | ... != ... | false | C.cs:24:13:24:13 | access to parameter o | C.cs:24:18:24:21 | null |
|
||||
| C.cs:24:13:24:21 | ... != ... | false | C.cs:24:18:24:21 | null | C.cs:24:13:24:13 | access to parameter o |
|
||||
| C.cs:28:37:28:45 | ... == ... | true | C.cs:28:37:28:37 | access to parameter o | C.cs:28:42:28:45 | null |
|
||||
| C.cs:28:37:28:45 | ... == ... | true | C.cs:28:42:28:45 | null | C.cs:28:37:28:37 | access to parameter o |
|
||||
| C.cs:30:40:30:48 | ... != ... | false | C.cs:30:40:30:40 | access to parameter o | C.cs:30:45:30:48 | null |
|
||||
| C.cs:30:40:30:48 | ... != ... | false | C.cs:30:45:30:48 | null | C.cs:30:40:30:40 | access to parameter o |
|
||||
| C.cs:34:13:34:21 | ... == ... | true | C.cs:34:13:34:13 | access to parameter o | C.cs:34:18:34:21 | null |
|
||||
| C.cs:34:13:34:21 | ... == ... | true | C.cs:34:18:34:21 | null | C.cs:34:13:34:13 | access to parameter o |
|
||||
| C.cs:41:22:41:30 | ... == ... | true | C.cs:41:22:41:22 | access to local variable s | C.cs:41:27:41:30 | null |
|
||||
| C.cs:41:22:41:30 | ... == ... | true | C.cs:41:27:41:30 | null | C.cs:41:22:41:22 | access to local variable s |
|
||||
| C.cs:45:22:45:30 | ... != ... | false | C.cs:45:22:45:22 | access to local variable s | C.cs:45:27:45:30 | null |
|
||||
| C.cs:45:22:45:30 | ... != ... | false | C.cs:45:27:45:30 | null | C.cs:45:22:45:22 | access to local variable s |
|
||||
| C.cs:114:22:114:36 | ... == ... | true | C.cs:114:22:114:28 | access to local variable colours | C.cs:114:33:114:36 | null |
|
||||
| C.cs:114:22:114:36 | ... == ... | true | C.cs:114:33:114:36 | null | C.cs:114:22:114:28 | access to local variable colours |
|
||||
| C.cs:114:41:114:59 | ... == ... | true | C.cs:114:41:114:54 | access to property Length | C.cs:114:59:114:59 | 0 |
|
||||
| C.cs:114:41:114:59 | ... == ... | true | C.cs:114:59:114:59 | 0 | C.cs:114:41:114:54 | access to property Length |
|
||||
| C.cs:121:13:121:28 | ... == ... | true | C.cs:121:13:121:20 | access to local variable children | C.cs:121:25:121:28 | null |
|
||||
| C.cs:121:13:121:28 | ... == ... | true | C.cs:121:25:121:28 | null | C.cs:121:13:121:20 | access to local variable children |
|
||||
| C.cs:130:13:130:38 | ... == ... | true | C.cs:130:14:130:29 | ... = ... | C.cs:130:35:130:38 | null |
|
||||
| C.cs:130:13:130:38 | ... == ... | true | C.cs:130:35:130:38 | null | C.cs:130:14:130:29 | ... = ... |
|
||||
| C.cs:146:13:146:39 | ... != ... | false | C.cs:146:14:146:30 | ... = ... | C.cs:146:36:146:39 | null |
|
||||
| C.cs:146:13:146:39 | ... != ... | false | C.cs:146:36:146:39 | null | C.cs:146:14:146:30 | ... = ... |
|
||||
| C.cs:158:16:158:24 | ... != ... | false | C.cs:158:16:158:16 | access to local variable s | C.cs:158:21:158:24 | null |
|
||||
| C.cs:158:16:158:24 | ... != ... | false | C.cs:158:21:158:24 | null | C.cs:158:16:158:16 | access to local variable s |
|
||||
| C.cs:166:16:166:24 | ... != ... | false | C.cs:166:16:166:16 | access to local variable s | C.cs:166:21:166:24 | null |
|
||||
| C.cs:166:16:166:24 | ... != ... | false | C.cs:166:21:166:24 | null | C.cs:166:16:166:16 | access to local variable s |
|
||||
| C.cs:173:16:173:24 | ... != ... | false | C.cs:173:16:173:16 | access to local variable s | C.cs:173:21:173:24 | null |
|
||||
| C.cs:173:16:173:24 | ... != ... | false | C.cs:173:21:173:24 | null | C.cs:173:16:173:16 | access to local variable s |
|
||||
| C.cs:187:16:187:24 | ... != ... | false | C.cs:187:16:187:16 | access to local variable s | C.cs:187:21:187:24 | null |
|
||||
| C.cs:187:16:187:24 | ... != ... | false | C.cs:187:21:187:24 | null | C.cs:187:16:187:16 | access to local variable s |
|
||||
| C.cs:212:13:212:21 | ... != ... | false | C.cs:212:13:212:13 | access to local variable s | C.cs:212:18:212:21 | null |
|
||||
| C.cs:212:13:212:21 | ... != ... | false | C.cs:212:18:212:21 | null | C.cs:212:13:212:13 | access to local variable s |
|
||||
| C.cs:218:13:218:21 | ... == ... | true | C.cs:218:13:218:13 | access to local variable s | C.cs:218:18:218:21 | null |
|
||||
| C.cs:218:13:218:21 | ... == ... | true | C.cs:218:18:218:21 | null | C.cs:218:13:218:13 | access to local variable s |
|
||||
| C.cs:222:13:222:21 | ... != ... | false | C.cs:222:13:222:13 | access to local variable s | C.cs:222:18:222:21 | null |
|
||||
| C.cs:222:13:222:21 | ... != ... | false | C.cs:222:18:222:21 | null | C.cs:222:13:222:13 | access to local variable s |
|
||||
| C.cs:222:26:222:42 | ... == ... | true | C.cs:222:26:222:37 | ... % ... | C.cs:222:42:222:42 | 0 |
|
||||
| C.cs:222:26:222:42 | ... == ... | true | C.cs:222:42:222:42 | 0 | C.cs:222:26:222:37 | ... % ... |
|
||||
| C.cs:230:22:230:30 | ... != ... | false | C.cs:230:22:230:22 | access to local variable s | C.cs:230:27:230:30 | null |
|
||||
| C.cs:230:22:230:30 | ... != ... | false | C.cs:230:27:230:30 | null | C.cs:230:22:230:22 | access to local variable s |
|
||||
| C.cs:236:24:236:32 | ... == ... | true | C.cs:236:24:236:24 | access to local variable s | C.cs:236:29:236:32 | null |
|
||||
| C.cs:236:24:236:32 | ... == ... | true | C.cs:236:29:236:32 | null | C.cs:236:24:236:24 | access to local variable s |
|
||||
| D.cs:28:13:28:25 | ... != ... | false | D.cs:28:13:28:17 | access to parameter param | D.cs:28:22:28:25 | null |
|
||||
| D.cs:28:13:28:25 | ... != ... | false | D.cs:28:22:28:25 | null | D.cs:28:13:28:17 | access to parameter param |
|
||||
| D.cs:38:13:38:21 | ... == ... | true | D.cs:38:13:38:13 | access to parameter x | D.cs:38:18:38:21 | null |
|
||||
| D.cs:38:13:38:21 | ... == ... | true | D.cs:38:18:38:21 | null | D.cs:38:13:38:13 | access to parameter x |
|
||||
| D.cs:39:16:39:24 | ... == ... | true | D.cs:39:16:39:16 | access to parameter x | D.cs:39:21:39:24 | null |
|
||||
| D.cs:39:16:39:24 | ... == ... | true | D.cs:39:21:39:24 | null | D.cs:39:16:39:16 | access to parameter x |
|
||||
| D.cs:45:13:45:22 | ... != ... | false | D.cs:45:13:45:14 | access to local variable o1 | D.cs:45:19:45:22 | null |
|
||||
| D.cs:45:13:45:22 | ... != ... | false | D.cs:45:19:45:22 | null | D.cs:45:13:45:14 | access to local variable o1 |
|
||||
| D.cs:51:13:51:44 | ... != ... | false | D.cs:51:14:51:35 | ... = ... | D.cs:51:41:51:44 | null |
|
||||
| D.cs:51:13:51:44 | ... != ... | false | D.cs:51:41:51:44 | null | D.cs:51:14:51:35 | ... = ... |
|
||||
| D.cs:55:13:55:42 | ... != ... | false | D.cs:55:14:55:32 | ... && ... | D.cs:55:38:55:42 | false |
|
||||
| D.cs:55:13:55:42 | ... != ... | false | D.cs:55:38:55:42 | false | D.cs:55:14:55:32 | ... && ... |
|
||||
| D.cs:55:23:55:32 | ... != ... | false | D.cs:55:23:55:24 | access to local variable o4 | D.cs:55:29:55:32 | null |
|
||||
| D.cs:55:23:55:32 | ... != ... | false | D.cs:55:29:55:32 | null | D.cs:55:23:55:24 | access to local variable o4 |
|
||||
| D.cs:58:19:58:28 | ... != ... | false | D.cs:58:19:58:20 | access to local variable o4 | D.cs:58:25:58:28 | null |
|
||||
| D.cs:58:19:58:28 | ... != ... | false | D.cs:58:25:58:28 | null | D.cs:58:19:58:20 | access to local variable o4 |
|
||||
| D.cs:59:13:59:22 | ... != ... | false | D.cs:59:13:59:14 | access to local variable o5 | D.cs:59:19:59:22 | null |
|
||||
| D.cs:59:13:59:22 | ... != ... | false | D.cs:59:19:59:22 | null | D.cs:59:13:59:14 | access to local variable o5 |
|
||||
| D.cs:61:13:61:22 | ... != ... | false | D.cs:61:13:61:14 | access to local variable o4 | D.cs:61:19:61:22 | null |
|
||||
| D.cs:61:13:61:22 | ... != ... | false | D.cs:61:19:61:22 | null | D.cs:61:13:61:14 | access to local variable o4 |
|
||||
| D.cs:69:18:69:27 | ... != ... | false | D.cs:69:18:69:19 | access to local variable o7 | D.cs:69:24:69:27 | null |
|
||||
| D.cs:69:18:69:27 | ... != ... | false | D.cs:69:24:69:27 | null | D.cs:69:18:69:19 | access to local variable o7 |
|
||||
| D.cs:76:21:76:30 | ... == ... | true | D.cs:76:21:76:22 | access to local variable o8 | D.cs:76:27:76:30 | null |
|
||||
| D.cs:76:21:76:30 | ... == ... | true | D.cs:76:27:76:30 | null | D.cs:76:21:76:22 | access to local variable o8 |
|
||||
| D.cs:77:13:77:22 | ... == ... | true | D.cs:77:13:77:17 | access to local variable track | D.cs:77:22:77:22 | 2 |
|
||||
| D.cs:77:13:77:22 | ... == ... | true | D.cs:77:22:77:22 | 2 | D.cs:77:13:77:17 | access to local variable track |
|
||||
| D.cs:79:13:79:23 | ... != ... | false | D.cs:79:13:79:17 | access to local variable track | D.cs:79:22:79:23 | 42 |
|
||||
| D.cs:79:13:79:23 | ... != ... | false | D.cs:79:22:79:23 | 42 | D.cs:79:13:79:17 | access to local variable track |
|
||||
| D.cs:110:26:110:35 | ... != ... | false | D.cs:110:26:110:27 | access to local variable xs | D.cs:110:32:110:35 | null |
|
||||
| D.cs:110:26:110:35 | ... != ... | false | D.cs:110:32:110:35 | null | D.cs:110:26:110:27 | access to local variable xs |
|
||||
| D.cs:118:13:118:21 | ... == ... | true | D.cs:118:13:118:13 | access to local variable x | D.cs:118:18:118:21 | null |
|
||||
| D.cs:118:13:118:21 | ... == ... | true | D.cs:118:18:118:21 | null | D.cs:118:13:118:13 | access to local variable x |
|
||||
| D.cs:119:13:119:21 | ... == ... | true | D.cs:119:13:119:13 | access to local variable x | D.cs:119:18:119:21 | null |
|
||||
| D.cs:119:13:119:21 | ... == ... | true | D.cs:119:18:119:21 | null | D.cs:119:13:119:13 | access to local variable x |
|
||||
| D.cs:127:20:127:28 | ... == ... | true | D.cs:127:20:127:20 | access to parameter a | D.cs:127:25:127:28 | null |
|
||||
| D.cs:127:20:127:28 | ... == ... | true | D.cs:127:25:127:28 | null | D.cs:127:20:127:20 | access to parameter a |
|
||||
| D.cs:128:20:128:28 | ... == ... | true | D.cs:128:20:128:20 | access to parameter b | D.cs:128:25:128:28 | null |
|
||||
| D.cs:128:20:128:28 | ... == ... | true | D.cs:128:25:128:28 | null | D.cs:128:20:128:20 | access to parameter b |
|
||||
| D.cs:130:13:130:24 | ... == ... | true | D.cs:130:13:130:16 | access to local variable alen | D.cs:130:21:130:24 | access to local variable blen |
|
||||
| D.cs:130:13:130:24 | ... == ... | true | D.cs:130:21:130:24 | access to local variable blen | D.cs:130:13:130:16 | access to local variable alen |
|
||||
| D.cs:139:13:139:21 | ... != ... | false | D.cs:139:13:139:13 | access to parameter a | D.cs:139:18:139:21 | null |
|
||||
| D.cs:139:13:139:21 | ... != ... | false | D.cs:139:18:139:21 | null | D.cs:139:13:139:13 | access to parameter a |
|
||||
| D.cs:152:17:152:27 | ... != ... | false | D.cs:152:17:152:19 | access to parameter obj | D.cs:152:24:152:27 | null |
|
||||
| D.cs:152:17:152:27 | ... != ... | false | D.cs:152:24:152:27 | null | D.cs:152:17:152:19 | access to parameter obj |
|
||||
| D.cs:196:13:196:21 | ... == ... | true | D.cs:196:13:196:13 | access to local variable o | D.cs:196:18:196:21 | null |
|
||||
| D.cs:196:13:196:21 | ... == ... | true | D.cs:196:18:196:21 | null | D.cs:196:13:196:13 | access to local variable o |
|
||||
| D.cs:206:17:206:25 | ... == ... | true | D.cs:206:17:206:17 | access to local variable e | D.cs:206:22:206:25 | null |
|
||||
| D.cs:206:17:206:25 | ... == ... | true | D.cs:206:22:206:25 | null | D.cs:206:17:206:17 | access to local variable e |
|
||||
| D.cs:212:18:212:26 | ... == ... | true | D.cs:212:18:212:18 | access to local variable n | D.cs:212:23:212:26 | null |
|
||||
| D.cs:212:18:212:26 | ... == ... | true | D.cs:212:23:212:26 | null | D.cs:212:18:212:18 | access to local variable n |
|
||||
| D.cs:216:13:216:22 | ... == ... | true | D.cs:216:13:216:14 | access to local variable o3 | D.cs:216:19:216:22 | null |
|
||||
| D.cs:216:13:216:22 | ... == ... | true | D.cs:216:19:216:22 | null | D.cs:216:13:216:14 | access to local variable o3 |
|
||||
| D.cs:221:13:221:22 | ... == ... | true | D.cs:221:13:221:14 | access to local variable o4 | D.cs:221:19:221:22 | null |
|
||||
| D.cs:221:13:221:22 | ... == ... | true | D.cs:221:19:221:22 | null | D.cs:221:13:221:14 | access to local variable o4 |
|
||||
| D.cs:242:13:242:25 | ... == ... | true | D.cs:242:13:242:17 | access to local variable other | D.cs:242:22:242:25 | null |
|
||||
| D.cs:242:13:242:25 | ... == ... | true | D.cs:242:22:242:25 | null | D.cs:242:13:242:17 | access to local variable other |
|
||||
| D.cs:244:13:244:25 | ... != ... | false | D.cs:244:13:244:17 | access to local variable other | D.cs:244:22:244:25 | null |
|
||||
| D.cs:244:13:244:25 | ... != ... | false | D.cs:244:22:244:25 | null | D.cs:244:13:244:17 | access to local variable other |
|
||||
| D.cs:274:17:274:26 | ... == ... | true | D.cs:274:17:274:20 | access to array element | D.cs:274:25:274:26 | 42 |
|
||||
| D.cs:274:17:274:26 | ... == ... | true | D.cs:274:25:274:26 | 42 | D.cs:274:17:274:20 | access to array element |
|
||||
| D.cs:299:17:299:22 | ... != ... | false | D.cs:299:17:299:17 | access to local variable i | D.cs:299:22:299:22 | 0 |
|
||||
| D.cs:299:17:299:22 | ... != ... | false | D.cs:299:22:299:22 | 0 | D.cs:299:17:299:17 | access to local variable i |
|
||||
| D.cs:318:16:318:36 | ... == ... | true | D.cs:318:16:318:19 | access to local variable stat | D.cs:318:24:318:36 | access to constant INIT |
|
||||
| D.cs:318:16:318:36 | ... == ... | true | D.cs:318:24:318:36 | access to constant INIT | D.cs:318:16:318:19 | access to local variable stat |
|
||||
| D.cs:318:41:318:62 | ... != ... | false | D.cs:318:41:318:44 | access to local variable stat | D.cs:318:49:318:62 | access to constant READY |
|
||||
| D.cs:318:41:318:62 | ... != ... | false | D.cs:318:49:318:62 | access to constant READY | D.cs:318:41:318:44 | access to local variable stat |
|
||||
| D.cs:321:17:321:37 | ... == ... | true | D.cs:321:17:321:20 | access to local variable stat | D.cs:321:25:321:37 | access to constant INIT |
|
||||
| D.cs:321:17:321:37 | ... == ... | true | D.cs:321:25:321:37 | access to constant INIT | D.cs:321:17:321:20 | access to local variable stat |
|
||||
| D.cs:336:13:336:23 | ... == ... | true | D.cs:336:13:336:15 | access to parameter obj | D.cs:336:20:336:23 | null |
|
||||
| D.cs:336:13:336:23 | ... == ... | true | D.cs:336:20:336:23 | null | D.cs:336:13:336:15 | access to parameter obj |
|
||||
| D.cs:341:13:341:23 | ... != ... | false | D.cs:341:13:341:15 | access to local variable msg | D.cs:341:20:341:23 | null |
|
||||
| D.cs:341:13:341:23 | ... != ... | false | D.cs:341:20:341:23 | null | D.cs:341:13:341:15 | access to local variable msg |
|
||||
| D.cs:367:27:367:35 | ... == ... | true | D.cs:367:27:367:27 | access to local variable b | D.cs:367:32:367:35 | null |
|
||||
| D.cs:367:27:367:35 | ... == ... | true | D.cs:367:32:367:35 | null | D.cs:367:27:367:27 | access to local variable b |
|
||||
| D.cs:382:13:382:23 | ... != ... | false | D.cs:382:13:382:15 | access to local variable ioe | D.cs:382:20:382:23 | null |
|
||||
| D.cs:382:13:382:23 | ... != ... | false | D.cs:382:20:382:23 | null | D.cs:382:13:382:15 | access to local variable ioe |
|
||||
| D.cs:390:20:390:28 | ... == ... | true | D.cs:390:20:390:20 | access to parameter a | D.cs:390:25:390:28 | null |
|
||||
| D.cs:390:20:390:28 | ... == ... | true | D.cs:390:25:390:28 | null | D.cs:390:20:390:20 | access to parameter a |
|
||||
| D.cs:397:20:397:28 | ... == ... | true | D.cs:397:20:397:20 | access to parameter b | D.cs:397:25:397:28 | null |
|
||||
| D.cs:397:20:397:28 | ... == ... | true | D.cs:397:25:397:28 | null | D.cs:397:20:397:20 | access to parameter b |
|
||||
| D.cs:407:14:407:22 | ... != ... | false | D.cs:407:14:407:14 | access to parameter x | D.cs:407:19:407:22 | null |
|
||||
| D.cs:407:14:407:22 | ... != ... | false | D.cs:407:19:407:22 | null | D.cs:407:14:407:14 | access to parameter x |
|
||||
| D.cs:407:27:407:35 | ... == ... | true | D.cs:407:27:407:27 | access to parameter y | D.cs:407:32:407:35 | null |
|
||||
| D.cs:407:27:407:35 | ... == ... | true | D.cs:407:32:407:35 | null | D.cs:407:27:407:27 | access to parameter y |
|
||||
| D.cs:407:42:407:50 | ... == ... | true | D.cs:407:42:407:42 | access to parameter x | D.cs:407:47:407:50 | null |
|
||||
| D.cs:407:42:407:50 | ... == ... | true | D.cs:407:47:407:50 | null | D.cs:407:42:407:42 | access to parameter x |
|
||||
| D.cs:407:55:407:63 | ... != ... | false | D.cs:407:55:407:55 | access to parameter y | D.cs:407:60:407:63 | null |
|
||||
| D.cs:407:55:407:63 | ... != ... | false | D.cs:407:60:407:63 | null | D.cs:407:55:407:55 | access to parameter y |
|
||||
| D.cs:409:13:409:21 | ... != ... | false | D.cs:409:13:409:13 | access to parameter x | D.cs:409:18:409:21 | null |
|
||||
| D.cs:409:13:409:21 | ... != ... | false | D.cs:409:18:409:21 | null | D.cs:409:13:409:13 | access to parameter x |
|
||||
| D.cs:411:13:411:21 | ... != ... | false | D.cs:411:13:411:13 | access to parameter y | D.cs:411:18:411:21 | null |
|
||||
| D.cs:411:13:411:21 | ... != ... | false | D.cs:411:18:411:21 | null | D.cs:411:13:411:13 | access to parameter y |
|
||||
| E.cs:10:34:10:54 | ... != ... | false | E.cs:10:35:10:45 | ... = ... | E.cs:10:51:10:54 | null |
|
||||
| E.cs:10:34:10:54 | ... != ... | false | E.cs:10:51:10:54 | null | E.cs:10:35:10:45 | ... = ... |
|
||||
| E.cs:12:32:12:52 | ... != ... | false | E.cs:12:33:12:43 | ... = ... | E.cs:12:49:12:52 | null |
|
||||
| E.cs:12:32:12:52 | ... != ... | false | E.cs:12:49:12:52 | null | E.cs:12:33:12:43 | ... = ... |
|
||||
| E.cs:20:19:20:28 | ... == ... | true | E.cs:20:19:20:20 | access to local variable s1 | E.cs:20:25:20:28 | null |
|
||||
| E.cs:20:19:20:28 | ... == ... | true | E.cs:20:25:20:28 | null | E.cs:20:19:20:20 | access to local variable s1 |
|
||||
| E.cs:21:13:21:22 | ... == ... | true | E.cs:21:13:21:14 | access to local variable s2 | E.cs:21:19:21:22 | null |
|
||||
| E.cs:21:13:21:22 | ... == ... | true | E.cs:21:19:21:22 | null | E.cs:21:13:21:14 | access to local variable s2 |
|
||||
| E.cs:24:19:24:28 | ... == ... | true | E.cs:24:19:24:20 | access to local variable s1 | E.cs:24:25:24:28 | null |
|
||||
| E.cs:24:19:24:28 | ... == ... | true | E.cs:24:25:24:28 | null | E.cs:24:19:24:20 | access to local variable s1 |
|
||||
| E.cs:26:13:26:22 | ... != ... | false | E.cs:26:13:26:14 | access to local variable s2 | E.cs:26:19:26:22 | null |
|
||||
| E.cs:26:13:26:22 | ... != ... | false | E.cs:26:19:26:22 | null | E.cs:26:13:26:14 | access to local variable s2 |
|
||||
| E.cs:56:17:56:33 | ... == ... | true | E.cs:56:17:56:28 | ... % ... | E.cs:56:33:56:33 | 0 |
|
||||
| E.cs:56:17:56:33 | ... == ... | true | E.cs:56:33:56:33 | 0 | E.cs:56:17:56:28 | ... % ... |
|
||||
| E.cs:70:22:70:32 | ... == ... | true | E.cs:70:22:70:24 | access to parameter arr | E.cs:70:29:70:32 | null |
|
||||
| E.cs:70:22:70:32 | ... == ... | true | E.cs:70:29:70:32 | null | E.cs:70:22:70:24 | access to parameter arr |
|
||||
| E.cs:83:13:83:24 | ... != ... | false | E.cs:83:13:83:16 | access to parameter vals | E.cs:83:21:83:24 | null |
|
||||
| E.cs:83:13:83:24 | ... != ... | false | E.cs:83:21:83:24 | null | E.cs:83:13:83:16 | access to parameter vals |
|
||||
| E.cs:85:18:85:29 | ... != ... | false | E.cs:85:18:85:21 | access to parameter vals | E.cs:85:26:85:29 | null |
|
||||
| E.cs:85:18:85:29 | ... != ... | false | E.cs:85:26:85:29 | null | E.cs:85:18:85:21 | access to parameter vals |
|
||||
| E.cs:90:17:90:27 | access to local variable switchguard | match case ...: | E.cs:90:17:90:27 | access to local variable switchguard | E.cs:92:18:92:27 | access to constant MY_CONST_A |
|
||||
| E.cs:90:17:90:27 | access to local variable switchguard | match case ...: | E.cs:90:17:90:27 | access to local variable switchguard | E.cs:95:18:95:27 | access to constant MY_CONST_C |
|
||||
| E.cs:90:17:90:27 | access to local variable switchguard | match case ...: | E.cs:90:17:90:27 | access to local variable switchguard | E.cs:97:18:97:27 | access to constant MY_CONST_B |
|
||||
| E.cs:126:21:126:29 | ... == ... | true | E.cs:126:21:126:24 | access to local variable step | E.cs:126:29:126:29 | 0 |
|
||||
| E.cs:126:21:126:29 | ... == ... | true | E.cs:126:29:126:29 | 0 | E.cs:126:21:126:24 | access to local variable step |
|
||||
| E.cs:153:13:153:24 | ... != ... | false | E.cs:153:13:153:16 | access to local variable obj2 | E.cs:153:21:153:24 | null |
|
||||
| E.cs:153:13:153:24 | ... != ... | false | E.cs:153:21:153:24 | null | E.cs:153:13:153:16 | access to local variable obj2 |
|
||||
| E.cs:164:17:164:25 | ... == ... | true | E.cs:164:17:164:17 | access to parameter a | E.cs:164:22:164:25 | null |
|
||||
| E.cs:164:17:164:25 | ... == ... | true | E.cs:164:22:164:25 | null | E.cs:164:17:164:17 | access to parameter a |
|
||||
| E.cs:175:19:175:29 | ... == ... | true | E.cs:175:19:175:21 | access to parameter obj | E.cs:175:26:175:29 | null |
|
||||
| E.cs:175:19:175:29 | ... == ... | true | E.cs:175:26:175:29 | null | E.cs:175:19:175:21 | access to parameter obj |
|
||||
| E.cs:176:13:176:22 | ... == ... | true | E.cs:176:13:176:14 | (...) ... | E.cs:176:19:176:22 | null |
|
||||
| E.cs:176:13:176:22 | ... == ... | true | E.cs:176:19:176:22 | null | E.cs:176:13:176:14 | (...) ... |
|
||||
| E.cs:180:13:180:23 | ... == ... | true | E.cs:180:13:180:15 | access to parameter obj | E.cs:180:20:180:23 | null |
|
||||
| E.cs:180:13:180:23 | ... == ... | true | E.cs:180:20:180:23 | null | E.cs:180:13:180:15 | access to parameter obj |
|
||||
| E.cs:184:13:184:22 | ... == ... | true | E.cs:184:13:184:14 | (...) ... | E.cs:184:19:184:22 | null |
|
||||
| E.cs:184:13:184:22 | ... == ... | true | E.cs:184:19:184:22 | null | E.cs:184:13:184:14 | (...) ... |
|
||||
| E.cs:252:13:252:21 | ... != ... | false | E.cs:252:13:252:13 | access to parameter i | E.cs:252:18:252:21 | null |
|
||||
| E.cs:252:13:252:21 | ... != ... | false | E.cs:252:18:252:21 | null | E.cs:252:13:252:13 | access to parameter i |
|
||||
| E.cs:259:13:259:21 | ... == ... | true | E.cs:259:13:259:13 | access to parameter i | E.cs:259:18:259:21 | null |
|
||||
| E.cs:259:13:259:21 | ... == ... | true | E.cs:259:18:259:21 | null | E.cs:259:13:259:13 | access to parameter i |
|
||||
| Forwarding.cs:59:13:59:21 | ... == ... | true | Forwarding.cs:59:13:59:13 | access to parameter o | Forwarding.cs:59:18:59:21 | null |
|
||||
| Forwarding.cs:59:13:59:21 | ... == ... | true | Forwarding.cs:59:18:59:21 | null | Forwarding.cs:59:13:59:13 | access to parameter o |
|
||||
| Forwarding.cs:78:16:78:39 | call to method ReferenceEquals | true | Forwarding.cs:78:32:78:32 | access to parameter o | Forwarding.cs:78:35:78:38 | null |
|
||||
| Forwarding.cs:78:16:78:39 | call to method ReferenceEquals | true | Forwarding.cs:78:35:78:38 | null | Forwarding.cs:78:32:78:32 | access to parameter o |
|
||||
| Forwarding.cs:83:16:83:24 | ... != ... | false | Forwarding.cs:83:16:83:16 | access to parameter o | Forwarding.cs:83:21:83:24 | null |
|
||||
| Forwarding.cs:83:16:83:24 | ... != ... | false | Forwarding.cs:83:21:83:24 | null | Forwarding.cs:83:16:83:16 | access to parameter o |
|
||||
| GuardedString.cs:19:13:19:26 | ... == ... | true | GuardedString.cs:19:15:19:21 | access to property Length | GuardedString.cs:19:26:19:26 | (...) ... |
|
||||
| GuardedString.cs:19:13:19:26 | ... == ... | true | GuardedString.cs:19:26:19:26 | (...) ... | GuardedString.cs:19:15:19:21 | access to property Length |
|
||||
| GuardedString.cs:34:13:34:26 | ... != ... | false | GuardedString.cs:34:15:34:21 | access to property Length | GuardedString.cs:34:26:34:26 | (...) ... |
|
||||
| GuardedString.cs:34:13:34:26 | ... != ... | false | GuardedString.cs:34:26:34:26 | (...) ... | GuardedString.cs:34:15:34:21 | access to property Length |
|
||||
| NullAlwaysBad.cs:9:17:9:25 | ... != ... | false | NullAlwaysBad.cs:9:17:9:17 | access to parameter s | NullAlwaysBad.cs:9:22:9:25 | null |
|
||||
| NullAlwaysBad.cs:9:17:9:25 | ... != ... | false | NullAlwaysBad.cs:9:22:9:25 | null | NullAlwaysBad.cs:9:17:9:17 | access to parameter s |
|
||||
| NullAlwaysGood.cs:9:17:9:25 | ... != ... | false | NullAlwaysGood.cs:9:17:9:17 | access to parameter s | NullAlwaysGood.cs:9:22:9:25 | null |
|
||||
| NullAlwaysGood.cs:9:17:9:25 | ... != ... | false | NullAlwaysGood.cs:9:22:9:25 | null | NullAlwaysGood.cs:9:17:9:17 | access to parameter s |
|
||||
| NullMaybeGood.cs:9:17:9:25 | ... != ... | false | NullMaybeGood.cs:9:17:9:17 | access to parameter o | NullMaybeGood.cs:9:22:9:25 | null |
|
||||
| NullMaybeGood.cs:9:17:9:25 | ... != ... | false | NullMaybeGood.cs:9:22:9:25 | null | NullMaybeGood.cs:9:17:9:17 | access to parameter o |
|
||||
| StringConcatenation.cs:15:16:15:22 | ... != ... | false | StringConcatenation.cs:15:16:15:16 | access to local variable s | StringConcatenation.cs:15:21:15:22 | "" |
|
||||
| StringConcatenation.cs:15:16:15:22 | ... != ... | false | StringConcatenation.cs:15:21:15:22 | "" | StringConcatenation.cs:15:16:15:16 | access to local variable s |
|
||||
| StringConcatenation.cs:22:16:22:22 | ... != ... | false | StringConcatenation.cs:22:16:22:16 | access to local variable s | StringConcatenation.cs:22:21:22:22 | "" |
|
||||
| StringConcatenation.cs:22:16:22:22 | ... != ... | false | StringConcatenation.cs:22:21:22:22 | "" | StringConcatenation.cs:22:16:22:16 | access to local variable s |
|
||||
5
csharp/ql/test/query-tests/Nullness/EqualityCheck.ql
Normal file
5
csharp/ql/test/query-tests/Nullness/EqualityCheck.ql
Normal file
@@ -0,0 +1,5 @@
|
||||
import csharp
|
||||
import semmle.code.csharp.controlflow.Guards
|
||||
|
||||
from Expr e1, AbstractValue v, Expr e2
|
||||
select Internal::getAnEqualityCheck(e1, v, e2), v, e1, e2
|
||||
@@ -80,7 +80,9 @@
|
||||
| Assert.cs:9:16:9:32 | String s = ... | null | Assert.cs:9:16:9:16 | access to local variable s | null |
|
||||
| Assert.cs:10:22:10:22 | access to local variable s | non-null | Assert.cs:9:20:9:32 | ... ? ... : ... | non-null |
|
||||
| Assert.cs:10:22:10:22 | access to local variable s | null | Assert.cs:9:20:9:32 | ... ? ... : ... | null |
|
||||
| Assert.cs:10:22:10:30 | ... != ... | false | Assert.cs:9:20:9:20 | access to parameter b | true |
|
||||
| Assert.cs:10:22:10:30 | ... != ... | false | Assert.cs:10:22:10:22 | access to local variable s | null |
|
||||
| Assert.cs:10:22:10:30 | ... != ... | true | Assert.cs:9:20:9:20 | access to parameter b | false |
|
||||
| Assert.cs:10:22:10:30 | ... != ... | true | Assert.cs:10:22:10:22 | access to local variable s | non-null |
|
||||
| Assert.cs:11:27:11:27 | access to local variable s | non-null | Assert.cs:9:20:9:32 | ... ? ... : ... | non-null |
|
||||
| Assert.cs:11:27:11:27 | access to local variable s | null | Assert.cs:9:20:9:32 | ... ? ... : ... | null |
|
||||
@@ -106,7 +108,9 @@
|
||||
| Assert.cs:21:9:21:25 | ... = ... | null | Assert.cs:21:13:21:25 | ... ? ... : ... | null |
|
||||
| Assert.cs:22:23:22:23 | access to local variable s | non-null | Assert.cs:21:13:21:25 | ... ? ... : ... | non-null |
|
||||
| Assert.cs:22:23:22:23 | access to local variable s | null | Assert.cs:21:13:21:25 | ... ? ... : ... | null |
|
||||
| Assert.cs:22:23:22:31 | ... == ... | false | Assert.cs:21:13:21:13 | access to parameter b | false |
|
||||
| Assert.cs:22:23:22:31 | ... == ... | false | Assert.cs:22:23:22:23 | access to local variable s | non-null |
|
||||
| Assert.cs:22:23:22:31 | ... == ... | true | Assert.cs:21:13:21:13 | access to parameter b | true |
|
||||
| Assert.cs:22:23:22:31 | ... == ... | true | Assert.cs:22:23:22:23 | access to local variable s | null |
|
||||
| Assert.cs:23:27:23:27 | access to local variable s | non-null | Assert.cs:21:13:21:25 | ... ? ... : ... | non-null |
|
||||
| Assert.cs:23:27:23:27 | access to local variable s | null | Assert.cs:21:13:21:25 | ... ? ... : ... | null |
|
||||
@@ -116,7 +120,9 @@
|
||||
| Assert.cs:25:9:25:25 | ... = ... | null | Assert.cs:25:13:25:25 | ... ? ... : ... | null |
|
||||
| Assert.cs:26:23:26:23 | access to local variable s | non-null | Assert.cs:25:13:25:25 | ... ? ... : ... | non-null |
|
||||
| Assert.cs:26:23:26:23 | access to local variable s | null | Assert.cs:25:13:25:25 | ... ? ... : ... | null |
|
||||
| Assert.cs:26:23:26:31 | ... != ... | false | Assert.cs:25:13:25:13 | access to parameter b | true |
|
||||
| Assert.cs:26:23:26:31 | ... != ... | false | Assert.cs:26:23:26:23 | access to local variable s | null |
|
||||
| Assert.cs:26:23:26:31 | ... != ... | true | Assert.cs:25:13:25:13 | access to parameter b | false |
|
||||
| Assert.cs:26:23:26:31 | ... != ... | true | Assert.cs:26:23:26:23 | access to local variable s | non-null |
|
||||
| Assert.cs:27:27:27:27 | access to local variable s | non-null | Assert.cs:25:13:25:25 | ... ? ... : ... | non-null |
|
||||
| Assert.cs:27:27:27:27 | access to local variable s | null | Assert.cs:25:13:25:25 | ... ? ... : ... | null |
|
||||
@@ -126,7 +132,9 @@
|
||||
| Assert.cs:29:9:29:25 | ... = ... | null | Assert.cs:29:13:29:25 | ... ? ... : ... | null |
|
||||
| Assert.cs:30:24:30:24 | access to local variable s | non-null | Assert.cs:29:13:29:25 | ... ? ... : ... | non-null |
|
||||
| Assert.cs:30:24:30:24 | access to local variable s | null | Assert.cs:29:13:29:25 | ... ? ... : ... | null |
|
||||
| Assert.cs:30:24:30:32 | ... != ... | false | Assert.cs:29:13:29:13 | access to parameter b | true |
|
||||
| Assert.cs:30:24:30:32 | ... != ... | false | Assert.cs:30:24:30:24 | access to local variable s | null |
|
||||
| Assert.cs:30:24:30:32 | ... != ... | true | Assert.cs:29:13:29:13 | access to parameter b | false |
|
||||
| Assert.cs:30:24:30:32 | ... != ... | true | Assert.cs:30:24:30:24 | access to local variable s | non-null |
|
||||
| Assert.cs:31:27:31:27 | access to local variable s | non-null | Assert.cs:29:13:29:25 | ... ? ... : ... | non-null |
|
||||
| Assert.cs:31:27:31:27 | access to local variable s | null | Assert.cs:29:13:29:25 | ... ? ... : ... | null |
|
||||
@@ -136,7 +144,9 @@
|
||||
| Assert.cs:33:9:33:25 | ... = ... | null | Assert.cs:33:13:33:25 | ... ? ... : ... | null |
|
||||
| Assert.cs:34:24:34:24 | access to local variable s | non-null | Assert.cs:33:13:33:25 | ... ? ... : ... | non-null |
|
||||
| Assert.cs:34:24:34:24 | access to local variable s | null | Assert.cs:33:13:33:25 | ... ? ... : ... | null |
|
||||
| Assert.cs:34:24:34:32 | ... == ... | false | Assert.cs:33:13:33:13 | access to parameter b | false |
|
||||
| Assert.cs:34:24:34:32 | ... == ... | false | Assert.cs:34:24:34:24 | access to local variable s | non-null |
|
||||
| Assert.cs:34:24:34:32 | ... == ... | true | Assert.cs:33:13:33:13 | access to parameter b | true |
|
||||
| Assert.cs:34:24:34:32 | ... == ... | true | Assert.cs:34:24:34:24 | access to local variable s | null |
|
||||
| Assert.cs:35:27:35:27 | access to local variable s | non-null | Assert.cs:33:13:33:25 | ... ? ... : ... | non-null |
|
||||
| Assert.cs:35:27:35:27 | access to local variable s | null | Assert.cs:33:13:33:25 | ... ? ... : ... | null |
|
||||
@@ -146,7 +156,9 @@
|
||||
| Assert.cs:37:9:37:25 | ... = ... | null | Assert.cs:37:13:37:25 | ... ? ... : ... | null |
|
||||
| Assert.cs:38:23:38:23 | access to local variable s | non-null | Assert.cs:37:13:37:25 | ... ? ... : ... | non-null |
|
||||
| Assert.cs:38:23:38:23 | access to local variable s | null | Assert.cs:37:13:37:25 | ... ? ... : ... | null |
|
||||
| Assert.cs:38:23:38:31 | ... != ... | false | Assert.cs:37:13:37:13 | access to parameter b | true |
|
||||
| Assert.cs:38:23:38:31 | ... != ... | false | Assert.cs:38:23:38:23 | access to local variable s | null |
|
||||
| Assert.cs:38:23:38:31 | ... != ... | true | Assert.cs:37:13:37:13 | access to parameter b | false |
|
||||
| Assert.cs:38:23:38:31 | ... != ... | true | Assert.cs:38:23:38:23 | access to local variable s | non-null |
|
||||
| Assert.cs:38:23:38:36 | ... && ... | true | Assert.cs:38:23:38:31 | ... != ... | true |
|
||||
| Assert.cs:38:23:38:36 | ... && ... | true | Assert.cs:38:36:38:36 | access to parameter b | true |
|
||||
@@ -158,7 +170,9 @@
|
||||
| Assert.cs:41:9:41:25 | ... = ... | null | Assert.cs:41:13:41:25 | ... ? ... : ... | null |
|
||||
| Assert.cs:42:24:42:24 | access to local variable s | non-null | Assert.cs:41:13:41:25 | ... ? ... : ... | non-null |
|
||||
| Assert.cs:42:24:42:24 | access to local variable s | null | Assert.cs:41:13:41:25 | ... ? ... : ... | null |
|
||||
| Assert.cs:42:24:42:32 | ... == ... | false | Assert.cs:41:13:41:13 | access to parameter b | false |
|
||||
| Assert.cs:42:24:42:32 | ... == ... | false | Assert.cs:42:24:42:24 | access to local variable s | non-null |
|
||||
| Assert.cs:42:24:42:32 | ... == ... | true | Assert.cs:41:13:41:13 | access to parameter b | true |
|
||||
| Assert.cs:42:24:42:32 | ... == ... | true | Assert.cs:42:24:42:24 | access to local variable s | null |
|
||||
| Assert.cs:42:24:42:37 | ... \|\| ... | false | Assert.cs:42:24:42:32 | ... == ... | false |
|
||||
| Assert.cs:42:24:42:37 | ... \|\| ... | false | Assert.cs:42:37:42:37 | access to parameter b | false |
|
||||
@@ -170,7 +184,9 @@
|
||||
| Assert.cs:45:9:45:25 | ... = ... | null | Assert.cs:45:13:45:25 | ... ? ... : ... | null |
|
||||
| Assert.cs:46:23:46:23 | access to local variable s | non-null | Assert.cs:45:13:45:25 | ... ? ... : ... | non-null |
|
||||
| Assert.cs:46:23:46:23 | access to local variable s | null | Assert.cs:45:13:45:25 | ... ? ... : ... | null |
|
||||
| Assert.cs:46:23:46:31 | ... == ... | false | Assert.cs:45:13:45:13 | access to parameter b | false |
|
||||
| Assert.cs:46:23:46:31 | ... == ... | false | Assert.cs:46:23:46:23 | access to local variable s | non-null |
|
||||
| Assert.cs:46:23:46:31 | ... == ... | true | Assert.cs:45:13:45:13 | access to parameter b | true |
|
||||
| Assert.cs:46:23:46:31 | ... == ... | true | Assert.cs:46:23:46:23 | access to local variable s | null |
|
||||
| Assert.cs:46:23:46:36 | ... && ... | true | Assert.cs:46:23:46:31 | ... == ... | true |
|
||||
| Assert.cs:46:23:46:36 | ... && ... | true | Assert.cs:46:36:46:36 | access to parameter b | true |
|
||||
@@ -182,7 +198,9 @@
|
||||
| Assert.cs:49:9:49:25 | ... = ... | null | Assert.cs:49:13:49:25 | ... ? ... : ... | null |
|
||||
| Assert.cs:50:24:50:24 | access to local variable s | non-null | Assert.cs:49:13:49:25 | ... ? ... : ... | non-null |
|
||||
| Assert.cs:50:24:50:24 | access to local variable s | null | Assert.cs:49:13:49:25 | ... ? ... : ... | null |
|
||||
| Assert.cs:50:24:50:32 | ... != ... | false | Assert.cs:49:13:49:13 | access to parameter b | true |
|
||||
| Assert.cs:50:24:50:32 | ... != ... | false | Assert.cs:50:24:50:24 | access to local variable s | null |
|
||||
| Assert.cs:50:24:50:32 | ... != ... | true | Assert.cs:49:13:49:13 | access to parameter b | false |
|
||||
| Assert.cs:50:24:50:32 | ... != ... | true | Assert.cs:50:24:50:24 | access to local variable s | non-null |
|
||||
| Assert.cs:50:24:50:37 | ... \|\| ... | false | Assert.cs:50:24:50:32 | ... != ... | false |
|
||||
| Assert.cs:50:24:50:37 | ... \|\| ... | false | Assert.cs:50:37:50:37 | access to parameter b | false |
|
||||
@@ -276,7 +294,9 @@
|
||||
| C.cs:40:13:40:35 | String s = ... | null | C.cs:40:13:40:13 | access to local variable s | null |
|
||||
| C.cs:41:22:41:22 | access to local variable s | non-null | C.cs:40:17:40:35 | ... ? ... : ... | non-null |
|
||||
| C.cs:41:22:41:22 | access to local variable s | null | C.cs:40:17:40:35 | ... ? ... : ... | null |
|
||||
| C.cs:41:22:41:30 | ... == ... | false | C.cs:40:17:40:23 | call to method Maybe | false |
|
||||
| C.cs:41:22:41:30 | ... == ... | false | C.cs:41:22:41:22 | access to local variable s | non-null |
|
||||
| C.cs:41:22:41:30 | ... == ... | true | C.cs:40:17:40:23 | call to method Maybe | true |
|
||||
| C.cs:41:22:41:30 | ... == ... | true | C.cs:41:22:41:22 | access to local variable s | null |
|
||||
| C.cs:42:9:42:9 | access to local variable s | non-null | C.cs:40:17:40:35 | ... ? ... : ... | non-null |
|
||||
| C.cs:42:9:42:9 | access to local variable s | null | C.cs:40:17:40:35 | ... ? ... : ... | null |
|
||||
@@ -286,7 +306,9 @@
|
||||
| C.cs:44:9:44:31 | ... = ... | null | C.cs:44:13:44:31 | ... ? ... : ... | null |
|
||||
| C.cs:45:22:45:22 | access to local variable s | non-null | C.cs:44:13:44:31 | ... ? ... : ... | non-null |
|
||||
| C.cs:45:22:45:22 | access to local variable s | null | C.cs:44:13:44:31 | ... ? ... : ... | null |
|
||||
| C.cs:45:22:45:30 | ... != ... | false | C.cs:44:13:44:19 | call to method Maybe | true |
|
||||
| C.cs:45:22:45:30 | ... != ... | false | C.cs:45:22:45:22 | access to local variable s | null |
|
||||
| C.cs:45:22:45:30 | ... != ... | true | C.cs:44:13:44:19 | call to method Maybe | false |
|
||||
| C.cs:45:22:45:30 | ... != ... | true | C.cs:45:22:45:22 | access to local variable s | non-null |
|
||||
| C.cs:46:9:46:9 | access to local variable s | non-null | C.cs:44:13:44:31 | ... ? ... : ... | non-null |
|
||||
| C.cs:46:9:46:9 | access to local variable s | null | C.cs:44:13:44:31 | ... ? ... : ... | null |
|
||||
@@ -491,7 +513,9 @@
|
||||
| C.cs:211:13:211:35 | String s = ... | null | C.cs:211:13:211:13 | access to local variable s | null |
|
||||
| C.cs:212:13:212:13 | access to local variable s | non-null | C.cs:211:17:211:35 | ... ? ... : ... | non-null |
|
||||
| C.cs:212:13:212:13 | access to local variable s | null | C.cs:211:17:211:35 | ... ? ... : ... | null |
|
||||
| C.cs:212:13:212:21 | ... != ... | false | C.cs:211:17:211:23 | call to method Maybe | true |
|
||||
| C.cs:212:13:212:21 | ... != ... | false | C.cs:212:13:212:13 | access to local variable s | null |
|
||||
| C.cs:212:13:212:21 | ... != ... | true | C.cs:211:17:211:23 | call to method Maybe | false |
|
||||
| C.cs:212:13:212:21 | ... != ... | true | C.cs:212:13:212:13 | access to local variable s | non-null |
|
||||
| C.cs:214:13:214:13 | access to local variable s | non-null | C.cs:211:17:211:35 | ... ? ... : ... | non-null |
|
||||
| C.cs:214:13:214:13 | access to local variable s | null | C.cs:211:17:211:35 | ... ? ... : ... | null |
|
||||
@@ -499,6 +523,7 @@
|
||||
| C.cs:215:13:215:20 | ... = ... | non-null | C.cs:215:17:215:20 | null | non-null |
|
||||
| C.cs:215:13:215:20 | ... = ... | null | C.cs:215:13:215:13 | access to local variable s | null |
|
||||
| C.cs:215:13:215:20 | ... = ... | null | C.cs:215:17:215:20 | null | null |
|
||||
| C.cs:218:13:218:21 | ... == ... | false | C.cs:212:13:212:21 | ... != ... | false |
|
||||
| C.cs:218:13:218:21 | ... == ... | false | C.cs:218:13:218:13 | access to local variable s | non-null |
|
||||
| C.cs:218:13:218:21 | ... == ... | true | C.cs:218:13:218:13 | access to local variable s | null |
|
||||
| C.cs:221:9:221:14 | ... = ... | non-null | C.cs:221:9:221:9 | access to local variable s | non-null |
|
||||
@@ -590,7 +615,9 @@
|
||||
| D.cs:44:13:44:44 | Object o1 = ... | null | D.cs:44:13:44:14 | access to local variable o1 | null |
|
||||
| D.cs:45:13:45:14 | access to local variable o1 | non-null | D.cs:44:18:44:44 | ... ? ... : ... | non-null |
|
||||
| D.cs:45:13:45:14 | access to local variable o1 | null | D.cs:44:18:44:44 | ... ? ... : ... | null |
|
||||
| D.cs:45:13:45:22 | ... != ... | false | D.cs:44:18:44:22 | access to field maybe | true |
|
||||
| D.cs:45:13:45:22 | ... != ... | false | D.cs:45:13:45:14 | access to local variable o1 | null |
|
||||
| D.cs:45:13:45:22 | ... != ... | true | D.cs:44:18:44:22 | access to field maybe | false |
|
||||
| D.cs:45:13:45:22 | ... != ... | true | D.cs:45:13:45:14 | access to local variable o1 | non-null |
|
||||
| D.cs:45:25:45:26 | access to local variable o1 | non-null | D.cs:44:18:44:44 | ... ? ... : ... | non-null |
|
||||
| D.cs:45:25:45:26 | access to local variable o1 | null | D.cs:44:18:44:44 | ... ? ... : ... | null |
|
||||
@@ -598,7 +625,9 @@
|
||||
| D.cs:47:13:47:34 | String o2 = ... | null | D.cs:47:13:47:14 | access to local variable o2 | null |
|
||||
| D.cs:48:13:48:14 | access to local variable o2 | non-null | D.cs:47:18:47:34 | ... ? ... : ... | non-null |
|
||||
| D.cs:48:13:48:14 | access to local variable o2 | null | D.cs:47:18:47:34 | ... ? ... : ... | null |
|
||||
| D.cs:48:13:48:24 | ... is ... | false | D.cs:47:18:47:22 | access to field maybe | true |
|
||||
| D.cs:48:13:48:24 | ... is ... | false | D.cs:48:13:48:14 | access to local variable o2 | null |
|
||||
| D.cs:48:13:48:24 | ... is ... | true | D.cs:47:18:47:22 | access to field maybe | false |
|
||||
| D.cs:48:13:48:24 | ... is ... | true | D.cs:48:13:48:14 | access to local variable o2 | non-null |
|
||||
| D.cs:48:27:48:28 | access to local variable o2 | non-null | D.cs:47:18:47:34 | ... ? ... : ... | non-null |
|
||||
| D.cs:48:27:48:28 | access to local variable o2 | null | D.cs:47:18:47:34 | ... ? ... : ... | null |
|
||||
@@ -620,7 +649,9 @@
|
||||
| D.cs:55:14:55:32 | ... && ... | true | D.cs:55:23:55:32 | ... != ... | true |
|
||||
| D.cs:55:23:55:24 | access to local variable o4 | non-null | D.cs:54:18:54:34 | ... ? ... : ... | non-null |
|
||||
| D.cs:55:23:55:24 | access to local variable o4 | null | D.cs:54:18:54:34 | ... ? ... : ... | null |
|
||||
| D.cs:55:23:55:32 | ... != ... | false | D.cs:54:18:54:22 | access to field maybe | true |
|
||||
| D.cs:55:23:55:32 | ... != ... | false | D.cs:55:23:55:24 | access to local variable o4 | null |
|
||||
| D.cs:55:23:55:32 | ... != ... | true | D.cs:54:18:54:22 | access to field maybe | false |
|
||||
| D.cs:55:23:55:32 | ... != ... | true | D.cs:55:23:55:24 | access to local variable o4 | non-null |
|
||||
| D.cs:56:13:56:14 | access to local variable o4 | non-null | D.cs:54:18:54:34 | ... ? ... : ... | non-null |
|
||||
| D.cs:56:13:56:14 | access to local variable o4 | null | D.cs:54:18:54:34 | ... ? ... : ... | null |
|
||||
@@ -628,17 +659,23 @@
|
||||
| D.cs:58:13:58:41 | String o5 = ... | null | D.cs:58:13:58:14 | access to local variable o5 | null |
|
||||
| D.cs:58:19:58:20 | access to local variable o4 | non-null | D.cs:54:18:54:34 | ... ? ... : ... | non-null |
|
||||
| D.cs:58:19:58:20 | access to local variable o4 | null | D.cs:54:18:54:34 | ... ? ... : ... | null |
|
||||
| D.cs:58:19:58:28 | ... != ... | false | D.cs:54:18:54:22 | access to field maybe | true |
|
||||
| D.cs:58:19:58:28 | ... != ... | false | D.cs:58:19:58:20 | access to local variable o4 | null |
|
||||
| D.cs:58:19:58:28 | ... != ... | true | D.cs:54:18:54:22 | access to field maybe | false |
|
||||
| D.cs:58:19:58:28 | ... != ... | true | D.cs:58:19:58:20 | access to local variable o4 | non-null |
|
||||
| D.cs:59:13:59:14 | access to local variable o5 | non-null | D.cs:58:18:58:41 | ... ? ... : ... | non-null |
|
||||
| D.cs:59:13:59:14 | access to local variable o5 | null | D.cs:58:18:58:41 | ... ? ... : ... | null |
|
||||
| D.cs:59:13:59:22 | ... != ... | false | D.cs:58:19:58:28 | ... != ... | false |
|
||||
| D.cs:59:13:59:22 | ... != ... | false | D.cs:59:13:59:14 | access to local variable o5 | null |
|
||||
| D.cs:59:13:59:22 | ... != ... | true | D.cs:58:19:58:28 | ... != ... | true |
|
||||
| D.cs:59:13:59:22 | ... != ... | true | D.cs:59:13:59:14 | access to local variable o5 | non-null |
|
||||
| D.cs:60:13:60:14 | access to local variable o4 | non-null | D.cs:54:18:54:34 | ... ? ... : ... | non-null |
|
||||
| D.cs:60:13:60:14 | access to local variable o4 | null | D.cs:54:18:54:34 | ... ? ... : ... | null |
|
||||
| D.cs:61:13:61:14 | access to local variable o4 | non-null | D.cs:54:18:54:34 | ... ? ... : ... | non-null |
|
||||
| D.cs:61:13:61:14 | access to local variable o4 | null | D.cs:54:18:54:34 | ... ? ... : ... | null |
|
||||
| D.cs:61:13:61:22 | ... != ... | false | D.cs:54:18:54:22 | access to field maybe | true |
|
||||
| D.cs:61:13:61:22 | ... != ... | false | D.cs:61:13:61:14 | access to local variable o4 | null |
|
||||
| D.cs:61:13:61:22 | ... != ... | true | D.cs:54:18:54:22 | access to field maybe | false |
|
||||
| D.cs:61:13:61:22 | ... != ... | true | D.cs:61:13:61:14 | access to local variable o4 | non-null |
|
||||
| D.cs:62:13:62:14 | access to local variable o5 | non-null | D.cs:58:18:58:41 | ... ? ... : ... | non-null |
|
||||
| D.cs:62:13:62:14 | access to local variable o5 | null | D.cs:58:18:58:41 | ... ? ... : ... | null |
|
||||
@@ -646,7 +683,9 @@
|
||||
| D.cs:64:13:64:34 | String o6 = ... | null | D.cs:64:13:64:14 | access to local variable o6 | null |
|
||||
| D.cs:65:13:65:29 | !... | false | D.cs:65:14:65:29 | call to method CustomIsNull | true |
|
||||
| D.cs:65:13:65:29 | !... | true | D.cs:65:14:65:29 | call to method CustomIsNull | false |
|
||||
| D.cs:65:14:65:29 | call to method CustomIsNull | false | D.cs:64:18:64:22 | access to field maybe | false |
|
||||
| D.cs:65:14:65:29 | call to method CustomIsNull | false | D.cs:65:27:65:28 | access to local variable o6 | non-null |
|
||||
| D.cs:65:14:65:29 | call to method CustomIsNull | true | D.cs:64:18:64:22 | access to field maybe | true |
|
||||
| D.cs:65:14:65:29 | call to method CustomIsNull | true | D.cs:65:27:65:28 | access to local variable o6 | null |
|
||||
| D.cs:65:27:65:28 | access to local variable o6 | non-null | D.cs:64:18:64:34 | ... ? ... : ... | non-null |
|
||||
| D.cs:65:27:65:28 | access to local variable o6 | null | D.cs:64:18:64:34 | ... ? ... : ... | null |
|
||||
@@ -658,7 +697,9 @@
|
||||
| D.cs:69:13:69:36 | Boolean ok = ... | true | D.cs:69:13:69:14 | access to local variable ok | true |
|
||||
| D.cs:69:18:69:19 | access to local variable o7 | non-null | D.cs:68:18:68:34 | ... ? ... : ... | non-null |
|
||||
| D.cs:69:18:69:19 | access to local variable o7 | null | D.cs:68:18:68:34 | ... ? ... : ... | null |
|
||||
| D.cs:69:18:69:27 | ... != ... | false | D.cs:68:18:68:22 | access to field maybe | true |
|
||||
| D.cs:69:18:69:27 | ... != ... | false | D.cs:69:18:69:19 | access to local variable o7 | null |
|
||||
| D.cs:69:18:69:27 | ... != ... | true | D.cs:68:18:68:22 | access to field maybe | false |
|
||||
| D.cs:69:18:69:27 | ... != ... | true | D.cs:69:18:69:19 | access to local variable o7 | non-null |
|
||||
| D.cs:69:18:69:36 | ... && ... | true | D.cs:69:18:69:27 | ... != ... | true |
|
||||
| D.cs:69:18:69:36 | ... && ... | true | D.cs:69:32:69:36 | ... > ... | true |
|
||||
@@ -672,7 +713,9 @@
|
||||
| D.cs:75:13:75:34 | String o8 = ... | null | D.cs:75:13:75:14 | access to local variable o8 | null |
|
||||
| D.cs:76:21:76:22 | access to local variable o8 | non-null | D.cs:75:18:75:34 | ... ? ... : ... | non-null |
|
||||
| D.cs:76:21:76:22 | access to local variable o8 | null | D.cs:75:18:75:34 | ... ? ... : ... | null |
|
||||
| D.cs:76:21:76:30 | ... == ... | false | D.cs:75:18:75:22 | access to field maybe | false |
|
||||
| D.cs:76:21:76:30 | ... == ... | false | D.cs:76:21:76:22 | access to local variable o8 | non-null |
|
||||
| D.cs:76:21:76:30 | ... == ... | true | D.cs:75:18:75:22 | access to field maybe | true |
|
||||
| D.cs:76:21:76:30 | ... == ... | true | D.cs:76:21:76:22 | access to local variable o8 | null |
|
||||
| D.cs:78:13:78:14 | access to local variable o8 | non-null | D.cs:75:18:75:34 | ... ? ... : ... | non-null |
|
||||
| D.cs:78:13:78:14 | access to local variable o8 | null | D.cs:75:18:75:34 | ... ? ... : ... | null |
|
||||
@@ -704,7 +747,9 @@
|
||||
| D.cs:106:17:106:18 | access to local variable xs | null | D.cs:89:20:89:44 | ... ? ... : ... | null |
|
||||
| D.cs:110:26:110:27 | access to local variable xs | non-null | D.cs:89:20:89:44 | ... ? ... : ... | non-null |
|
||||
| D.cs:110:26:110:27 | access to local variable xs | null | D.cs:89:20:89:44 | ... ? ... : ... | null |
|
||||
| D.cs:110:26:110:35 | ... != ... | false | D.cs:89:20:89:24 | access to field maybe | true |
|
||||
| D.cs:110:26:110:35 | ... != ... | false | D.cs:110:26:110:27 | access to local variable xs | null |
|
||||
| D.cs:110:26:110:35 | ... != ... | true | D.cs:89:20:89:24 | access to field maybe | false |
|
||||
| D.cs:110:26:110:35 | ... != ... | true | D.cs:110:26:110:27 | access to local variable xs | non-null |
|
||||
| D.cs:111:13:111:14 | access to local variable xs | non-null | D.cs:89:20:89:44 | ... ? ... : ... | non-null |
|
||||
| D.cs:111:13:111:14 | access to local variable xs | null | D.cs:89:20:89:44 | ... ? ... : ... | null |
|
||||
@@ -718,13 +763,16 @@
|
||||
| D.cs:118:9:118:30 | ... = ... | null | D.cs:118:13:118:30 | ... ? ... : ... | null |
|
||||
| D.cs:118:13:118:13 | access to local variable x | non-null | D.cs:117:17:117:32 | ... ? ... : ... | non-null |
|
||||
| D.cs:118:13:118:13 | access to local variable x | null | D.cs:117:17:117:32 | ... ? ... : ... | null |
|
||||
| D.cs:118:13:118:21 | ... == ... | false | D.cs:117:17:117:17 | access to parameter b | false |
|
||||
| D.cs:118:13:118:21 | ... == ... | false | D.cs:118:13:118:13 | access to local variable x | non-null |
|
||||
| D.cs:118:13:118:21 | ... == ... | true | D.cs:117:17:117:17 | access to parameter b | true |
|
||||
| D.cs:118:13:118:21 | ... == ... | true | D.cs:118:13:118:13 | access to local variable x | null |
|
||||
| D.cs:118:30:118:30 | access to local variable x | non-null | D.cs:117:17:117:32 | ... ? ... : ... | non-null |
|
||||
| D.cs:118:30:118:30 | access to local variable x | null | D.cs:117:17:117:32 | ... ? ... : ... | null |
|
||||
| D.cs:119:13:119:13 | access to local variable x | non-null | D.cs:118:13:118:30 | ... ? ... : ... | non-null |
|
||||
| D.cs:119:13:119:13 | access to local variable x | null | D.cs:118:13:118:30 | ... ? ... : ... | null |
|
||||
| D.cs:119:13:119:21 | ... == ... | false | D.cs:119:13:119:13 | access to local variable x | non-null |
|
||||
| D.cs:119:13:119:21 | ... == ... | true | D.cs:118:13:118:21 | ... == ... | false |
|
||||
| D.cs:119:13:119:21 | ... == ... | true | D.cs:119:13:119:13 | access to local variable x | null |
|
||||
| D.cs:120:13:120:13 | access to local variable x | non-null | D.cs:118:13:118:30 | ... ? ... : ... | non-null |
|
||||
| D.cs:120:13:120:13 | access to local variable x | null | D.cs:118:13:118:30 | ... ? ... : ... | null |
|
||||
@@ -827,7 +875,9 @@
|
||||
| D.cs:241:13:241:37 | String other = ... | null | D.cs:241:13:241:17 | access to local variable other | null |
|
||||
| D.cs:242:13:242:17 | access to local variable other | non-null | D.cs:241:21:241:37 | ... ? ... : ... | non-null |
|
||||
| D.cs:242:13:242:17 | access to local variable other | null | D.cs:241:21:241:37 | ... ? ... : ... | null |
|
||||
| D.cs:242:13:242:25 | ... == ... | false | D.cs:241:21:241:25 | access to field maybe | false |
|
||||
| D.cs:242:13:242:25 | ... == ... | false | D.cs:242:13:242:17 | access to local variable other | non-null |
|
||||
| D.cs:242:13:242:25 | ... == ... | true | D.cs:241:21:241:25 | access to field maybe | true |
|
||||
| D.cs:242:13:242:25 | ... == ... | true | D.cs:242:13:242:17 | access to local variable other | null |
|
||||
| D.cs:243:13:243:18 | ... = ... | non-null | D.cs:243:13:243:13 | access to local variable o | non-null |
|
||||
| D.cs:243:13:243:18 | ... = ... | non-null | D.cs:243:17:243:18 | "" | non-null |
|
||||
@@ -835,7 +885,9 @@
|
||||
| D.cs:243:13:243:18 | ... = ... | null | D.cs:243:17:243:18 | "" | null |
|
||||
| D.cs:244:13:244:17 | access to local variable other | non-null | D.cs:241:21:241:37 | ... ? ... : ... | non-null |
|
||||
| D.cs:244:13:244:17 | access to local variable other | null | D.cs:241:21:241:37 | ... ? ... : ... | null |
|
||||
| D.cs:244:13:244:25 | ... != ... | false | D.cs:241:21:241:25 | access to field maybe | true |
|
||||
| D.cs:244:13:244:25 | ... != ... | false | D.cs:244:13:244:17 | access to local variable other | null |
|
||||
| D.cs:244:13:244:25 | ... != ... | true | D.cs:241:21:241:25 | access to field maybe | false |
|
||||
| D.cs:244:13:244:25 | ... != ... | true | D.cs:244:13:244:17 | access to local variable other | non-null |
|
||||
| D.cs:249:13:249:38 | String o2 = ... | non-null | D.cs:249:13:249:14 | access to local variable o2 | non-null |
|
||||
| D.cs:249:13:249:38 | String o2 = ... | null | D.cs:249:13:249:14 | access to local variable o2 | null |
|
||||
@@ -917,6 +969,7 @@
|
||||
| D.cs:339:13:339:23 | ... = ... | non-null | D.cs:339:19:339:23 | "bar" | non-null |
|
||||
| D.cs:339:13:339:23 | ... = ... | null | D.cs:339:13:339:15 | access to local variable msg | null |
|
||||
| D.cs:339:13:339:23 | ... = ... | null | D.cs:339:19:339:23 | "bar" | null |
|
||||
| D.cs:341:13:341:23 | ... != ... | false | D.cs:336:13:336:23 | ... == ... | false |
|
||||
| D.cs:341:13:341:23 | ... != ... | false | D.cs:341:13:341:15 | access to local variable msg | null |
|
||||
| D.cs:341:13:341:23 | ... != ... | true | D.cs:341:13:341:15 | access to local variable msg | non-null |
|
||||
| D.cs:343:13:343:27 | ... + ... | non-null | D.cs:343:13:343:15 | access to local variable msg | non-null |
|
||||
@@ -948,7 +1001,9 @@
|
||||
| D.cs:367:13:367:56 | ... && ... | true | D.cs:367:27:367:55 | ... \|\| ... | true |
|
||||
| D.cs:367:27:367:27 | access to local variable b | non-null | D.cs:366:19:366:47 | ... ? ... : ... | non-null |
|
||||
| D.cs:367:27:367:27 | access to local variable b | null | D.cs:366:19:366:47 | ... ? ... : ... | null |
|
||||
| D.cs:367:27:367:35 | ... == ... | false | D.cs:366:19:366:23 | access to field maybe | false |
|
||||
| D.cs:367:27:367:35 | ... == ... | false | D.cs:367:27:367:27 | access to local variable b | non-null |
|
||||
| D.cs:367:27:367:35 | ... == ... | true | D.cs:366:19:366:23 | access to field maybe | true |
|
||||
| D.cs:367:27:367:35 | ... == ... | true | D.cs:367:27:367:27 | access to local variable b | null |
|
||||
| D.cs:367:27:367:55 | ... \|\| ... | false | D.cs:367:27:367:35 | ... == ... | false |
|
||||
| D.cs:367:27:367:55 | ... \|\| ... | false | D.cs:367:40:367:55 | ... < ... | false |
|
||||
@@ -962,6 +1017,7 @@
|
||||
| D.cs:380:13:380:35 | ... = ... | non-null | D.cs:380:19:380:35 | object creation of type Exception | non-null |
|
||||
| D.cs:380:13:380:35 | ... = ... | null | D.cs:380:13:380:15 | access to local variable ioe | null |
|
||||
| D.cs:380:13:380:35 | ... = ... | null | D.cs:380:19:380:35 | object creation of type Exception | null |
|
||||
| D.cs:382:13:382:23 | ... != ... | false | D.cs:379:13:379:13 | access to parameter b | false |
|
||||
| D.cs:382:13:382:23 | ... != ... | false | D.cs:382:13:382:15 | access to local variable ioe | null |
|
||||
| D.cs:382:13:382:23 | ... != ... | true | D.cs:382:13:382:15 | access to local variable ioe | non-null |
|
||||
| D.cs:383:13:383:19 | ... = ... | non-null | D.cs:383:13:383:15 | access to local variable ioe | non-null |
|
||||
@@ -1024,11 +1080,15 @@
|
||||
| E.cs:20:13:20:41 | String s2 = ... | null | E.cs:20:13:20:14 | access to local variable s2 | null |
|
||||
| E.cs:20:19:20:20 | access to local variable s1 | non-null | E.cs:19:18:19:30 | ... ? ... : ... | non-null |
|
||||
| E.cs:20:19:20:20 | access to local variable s1 | null | E.cs:19:18:19:30 | ... ? ... : ... | null |
|
||||
| E.cs:20:19:20:28 | ... == ... | false | E.cs:19:18:19:18 | access to parameter x | false |
|
||||
| E.cs:20:19:20:28 | ... == ... | false | E.cs:20:19:20:20 | access to local variable s1 | non-null |
|
||||
| E.cs:20:19:20:28 | ... == ... | true | E.cs:19:18:19:18 | access to parameter x | true |
|
||||
| E.cs:20:19:20:28 | ... == ... | true | E.cs:20:19:20:20 | access to local variable s1 | null |
|
||||
| E.cs:21:13:21:14 | access to local variable s2 | non-null | E.cs:20:18:20:41 | ... ? ... : ... | non-null |
|
||||
| E.cs:21:13:21:14 | access to local variable s2 | null | E.cs:20:18:20:41 | ... ? ... : ... | null |
|
||||
| E.cs:21:13:21:22 | ... == ... | false | E.cs:20:19:20:28 | ... == ... | false |
|
||||
| E.cs:21:13:21:22 | ... == ... | false | E.cs:21:13:21:14 | access to local variable s2 | non-null |
|
||||
| E.cs:21:13:21:22 | ... == ... | true | E.cs:20:19:20:28 | ... == ... | true |
|
||||
| E.cs:21:13:21:22 | ... == ... | true | E.cs:21:13:21:14 | access to local variable s2 | null |
|
||||
| E.cs:23:13:23:30 | ... = ... | non-null | E.cs:23:13:23:14 | access to local variable s1 | non-null |
|
||||
| E.cs:23:13:23:30 | ... = ... | non-null | E.cs:23:18:23:30 | ... ? ... : ... | non-null |
|
||||
@@ -1040,7 +1100,9 @@
|
||||
| E.cs:24:13:24:41 | ... = ... | null | E.cs:24:18:24:41 | ... ? ... : ... | null |
|
||||
| E.cs:24:19:24:20 | access to local variable s1 | non-null | E.cs:23:18:23:30 | ... ? ... : ... | non-null |
|
||||
| E.cs:24:19:24:20 | access to local variable s1 | null | E.cs:23:18:23:30 | ... ? ... : ... | null |
|
||||
| E.cs:24:19:24:28 | ... == ... | false | E.cs:23:18:23:18 | access to parameter y | false |
|
||||
| E.cs:24:19:24:28 | ... == ... | false | E.cs:24:19:24:20 | access to local variable s1 | non-null |
|
||||
| E.cs:24:19:24:28 | ... == ... | true | E.cs:23:18:23:18 | access to parameter y | true |
|
||||
| E.cs:24:19:24:28 | ... == ... | true | E.cs:24:19:24:20 | access to local variable s1 | null |
|
||||
| E.cs:26:13:26:22 | ... != ... | false | E.cs:26:13:26:14 | access to local variable s2 | null |
|
||||
| E.cs:26:13:26:22 | ... != ... | true | E.cs:26:13:26:14 | access to local variable s2 | non-null |
|
||||
@@ -1271,6 +1333,7 @@
|
||||
| GuardedString.cs:7:16:7:32 | String s = ... | null | GuardedString.cs:7:16:7:16 | access to local variable s | null |
|
||||
| GuardedString.cs:9:13:9:36 | !... | false | GuardedString.cs:9:14:9:36 | call to method IsNullOrEmpty | true |
|
||||
| GuardedString.cs:9:13:9:36 | !... | true | GuardedString.cs:9:14:9:36 | call to method IsNullOrEmpty | false |
|
||||
| GuardedString.cs:9:14:9:36 | call to method IsNullOrEmpty | false | GuardedString.cs:7:20:7:20 | access to parameter b | false |
|
||||
| GuardedString.cs:9:14:9:36 | call to method IsNullOrEmpty | false | GuardedString.cs:9:35:9:35 | access to local variable s | non-null |
|
||||
| GuardedString.cs:9:35:9:35 | access to local variable s | non-null | GuardedString.cs:7:20:7:32 | ... ? ... : ... | non-null |
|
||||
| GuardedString.cs:9:35:9:35 | access to local variable s | null | GuardedString.cs:7:20:7:32 | ... ? ... : ... | null |
|
||||
@@ -1278,47 +1341,60 @@
|
||||
| GuardedString.cs:11:31:11:31 | access to local variable s | null | GuardedString.cs:7:20:7:32 | ... ? ... : ... | null |
|
||||
| GuardedString.cs:14:13:14:41 | !... | false | GuardedString.cs:14:14:14:41 | call to method IsNullOrWhiteSpace | true |
|
||||
| GuardedString.cs:14:13:14:41 | !... | true | GuardedString.cs:14:14:14:41 | call to method IsNullOrWhiteSpace | false |
|
||||
| GuardedString.cs:14:14:14:41 | call to method IsNullOrWhiteSpace | false | GuardedString.cs:7:20:7:20 | access to parameter b | false |
|
||||
| GuardedString.cs:14:14:14:41 | call to method IsNullOrWhiteSpace | false | GuardedString.cs:14:40:14:40 | access to local variable s | non-null |
|
||||
| GuardedString.cs:14:40:14:40 | access to local variable s | non-null | GuardedString.cs:7:20:7:32 | ... ? ... : ... | non-null |
|
||||
| GuardedString.cs:14:40:14:40 | access to local variable s | null | GuardedString.cs:7:20:7:32 | ... ? ... : ... | null |
|
||||
| GuardedString.cs:16:31:16:31 | access to local variable s | non-null | GuardedString.cs:7:20:7:32 | ... ? ... : ... | non-null |
|
||||
| GuardedString.cs:16:31:16:31 | access to local variable s | null | GuardedString.cs:7:20:7:32 | ... ? ... : ... | null |
|
||||
| GuardedString.cs:19:13:19:13 | access to local variable s | non-null | GuardedString.cs:7:20:7:20 | access to parameter b | false |
|
||||
| GuardedString.cs:19:13:19:13 | access to local variable s | non-null | GuardedString.cs:7:20:7:32 | ... ? ... : ... | non-null |
|
||||
| GuardedString.cs:19:13:19:13 | access to local variable s | null | GuardedString.cs:7:20:7:20 | access to parameter b | true |
|
||||
| GuardedString.cs:19:13:19:13 | access to local variable s | null | GuardedString.cs:7:20:7:32 | ... ? ... : ... | null |
|
||||
| GuardedString.cs:19:13:19:26 | ... == ... | true | GuardedString.cs:19:15:19:21 | access to property Length | non-null |
|
||||
| GuardedString.cs:19:15:19:21 | access to property Length | non-null | GuardedString.cs:19:13:19:13 | access to local variable s | non-null |
|
||||
| GuardedString.cs:19:15:19:21 | access to property Length | null | GuardedString.cs:19:13:19:13 | access to local variable s | null |
|
||||
| GuardedString.cs:20:31:20:31 | access to local variable s | non-null | GuardedString.cs:7:20:7:32 | ... ? ... : ... | non-null |
|
||||
| GuardedString.cs:20:31:20:31 | access to local variable s | null | GuardedString.cs:7:20:7:32 | ... ? ... : ... | null |
|
||||
| GuardedString.cs:22:13:22:13 | access to local variable s | non-null | GuardedString.cs:7:20:7:20 | access to parameter b | false |
|
||||
| GuardedString.cs:22:13:22:13 | access to local variable s | non-null | GuardedString.cs:7:20:7:32 | ... ? ... : ... | non-null |
|
||||
| GuardedString.cs:22:13:22:13 | access to local variable s | null | GuardedString.cs:7:20:7:20 | access to parameter b | true |
|
||||
| GuardedString.cs:22:13:22:13 | access to local variable s | null | GuardedString.cs:7:20:7:32 | ... ? ... : ... | null |
|
||||
| GuardedString.cs:22:13:22:25 | ... > ... | true | GuardedString.cs:22:15:22:21 | access to property Length | non-null |
|
||||
| GuardedString.cs:22:15:22:21 | access to property Length | non-null | GuardedString.cs:22:13:22:13 | access to local variable s | non-null |
|
||||
| GuardedString.cs:22:15:22:21 | access to property Length | null | GuardedString.cs:22:13:22:13 | access to local variable s | null |
|
||||
| GuardedString.cs:23:31:23:31 | access to local variable s | non-null | GuardedString.cs:7:20:7:32 | ... ? ... : ... | non-null |
|
||||
| GuardedString.cs:23:31:23:31 | access to local variable s | null | GuardedString.cs:7:20:7:32 | ... ? ... : ... | null |
|
||||
| GuardedString.cs:25:13:25:13 | access to local variable s | non-null | GuardedString.cs:7:20:7:20 | access to parameter b | false |
|
||||
| GuardedString.cs:25:13:25:13 | access to local variable s | non-null | GuardedString.cs:7:20:7:32 | ... ? ... : ... | non-null |
|
||||
| GuardedString.cs:25:13:25:13 | access to local variable s | null | GuardedString.cs:7:20:7:20 | access to parameter b | true |
|
||||
| GuardedString.cs:25:13:25:13 | access to local variable s | null | GuardedString.cs:7:20:7:32 | ... ? ... : ... | null |
|
||||
| GuardedString.cs:25:13:25:26 | ... >= ... | true | GuardedString.cs:25:15:25:21 | access to property Length | non-null |
|
||||
| GuardedString.cs:25:15:25:21 | access to property Length | non-null | GuardedString.cs:25:13:25:13 | access to local variable s | non-null |
|
||||
| GuardedString.cs:25:15:25:21 | access to property Length | null | GuardedString.cs:25:13:25:13 | access to local variable s | null |
|
||||
| GuardedString.cs:26:31:26:31 | access to local variable s | non-null | GuardedString.cs:7:20:7:32 | ... ? ... : ... | non-null |
|
||||
| GuardedString.cs:26:31:26:31 | access to local variable s | null | GuardedString.cs:7:20:7:32 | ... ? ... : ... | null |
|
||||
| GuardedString.cs:28:13:28:13 | access to local variable s | non-null | GuardedString.cs:7:20:7:20 | access to parameter b | false |
|
||||
| GuardedString.cs:28:13:28:13 | access to local variable s | non-null | GuardedString.cs:7:20:7:32 | ... ? ... : ... | non-null |
|
||||
| GuardedString.cs:28:13:28:13 | access to local variable s | null | GuardedString.cs:7:20:7:20 | access to parameter b | true |
|
||||
| GuardedString.cs:28:13:28:13 | access to local variable s | null | GuardedString.cs:7:20:7:32 | ... ? ... : ... | null |
|
||||
| GuardedString.cs:28:13:28:26 | ... < ... | true | GuardedString.cs:28:15:28:21 | access to property Length | non-null |
|
||||
| GuardedString.cs:28:15:28:21 | access to property Length | non-null | GuardedString.cs:28:13:28:13 | access to local variable s | non-null |
|
||||
| GuardedString.cs:28:15:28:21 | access to property Length | null | GuardedString.cs:28:13:28:13 | access to local variable s | null |
|
||||
| GuardedString.cs:29:31:29:31 | access to local variable s | non-null | GuardedString.cs:7:20:7:32 | ... ? ... : ... | non-null |
|
||||
| GuardedString.cs:29:31:29:31 | access to local variable s | null | GuardedString.cs:7:20:7:32 | ... ? ... : ... | null |
|
||||
| GuardedString.cs:31:13:31:13 | access to local variable s | non-null | GuardedString.cs:7:20:7:20 | access to parameter b | false |
|
||||
| GuardedString.cs:31:13:31:13 | access to local variable s | non-null | GuardedString.cs:7:20:7:32 | ... ? ... : ... | non-null |
|
||||
| GuardedString.cs:31:13:31:13 | access to local variable s | null | GuardedString.cs:7:20:7:20 | access to parameter b | true |
|
||||
| GuardedString.cs:31:13:31:13 | access to local variable s | null | GuardedString.cs:7:20:7:32 | ... ? ... : ... | null |
|
||||
| GuardedString.cs:31:13:31:27 | ... <= ... | true | GuardedString.cs:31:15:31:21 | access to property Length | non-null |
|
||||
| GuardedString.cs:31:15:31:21 | access to property Length | non-null | GuardedString.cs:31:13:31:13 | access to local variable s | non-null |
|
||||
| GuardedString.cs:31:15:31:21 | access to property Length | null | GuardedString.cs:31:13:31:13 | access to local variable s | null |
|
||||
| GuardedString.cs:32:31:32:31 | access to local variable s | non-null | GuardedString.cs:7:20:7:32 | ... ? ... : ... | non-null |
|
||||
| GuardedString.cs:32:31:32:31 | access to local variable s | null | GuardedString.cs:7:20:7:32 | ... ? ... : ... | null |
|
||||
| GuardedString.cs:34:13:34:13 | access to local variable s | non-null | GuardedString.cs:7:20:7:20 | access to parameter b | false |
|
||||
| GuardedString.cs:34:13:34:13 | access to local variable s | non-null | GuardedString.cs:7:20:7:32 | ... ? ... : ... | non-null |
|
||||
| GuardedString.cs:34:13:34:13 | access to local variable s | null | GuardedString.cs:7:20:7:20 | access to parameter b | true |
|
||||
| GuardedString.cs:34:13:34:13 | access to local variable s | null | GuardedString.cs:7:20:7:32 | ... ? ... : ... | null |
|
||||
| GuardedString.cs:34:13:34:26 | ... != ... | false | GuardedString.cs:34:15:34:21 | access to property Length | non-null |
|
||||
| GuardedString.cs:34:15:34:21 | access to property Length | non-null | GuardedString.cs:34:13:34:13 | access to local variable s | non-null |
|
||||
|
||||
@@ -8,7 +8,6 @@
|
||||
| C.cs:243:13:243:13 | access to local variable s | Variable '$@' may be null here because of $@ assignment. | C.cs:229:16:229:16 | s | s | C.cs:241:24:241:31 | ... = ... | this |
|
||||
| D.cs:23:9:23:13 | access to parameter param | Variable '$@' may be null here because of $@ null argument. | D.cs:21:32:21:36 | param | param | D.cs:17:17:17:20 | null | this |
|
||||
| D.cs:32:9:32:13 | access to parameter param | Variable '$@' may be null here as suggested by $@ null check. | D.cs:26:32:26:36 | param | param | D.cs:28:13:28:25 | ... != ... | this |
|
||||
| D.cs:60:13:60:14 | access to local variable o4 | Variable '$@' may be null here because of $@ assignment. | D.cs:54:13:54:14 | o4 | o4 | D.cs:54:13:54:34 | String o4 = ... | this |
|
||||
| D.cs:62:13:62:14 | access to local variable o5 | Variable '$@' may be null here because of $@ assignment. | D.cs:58:13:58:14 | o5 | o5 | D.cs:58:13:58:41 | String o5 = ... | this |
|
||||
| D.cs:73:13:73:14 | access to local variable o7 | Variable '$@' may be null here because of $@ assignment. | D.cs:68:13:68:14 | o7 | o7 | D.cs:68:13:68:34 | String o7 = ... | this |
|
||||
| D.cs:78:13:78:14 | access to local variable o8 | Variable '$@' may be null here because of $@ assignment. | D.cs:75:13:75:14 | o8 | o8 | D.cs:75:13:75:34 | String o8 = ... | this |
|
||||
@@ -38,7 +37,6 @@
|
||||
| D.cs:300:17:300:20 | access to local variable prev | Variable '$@' may be null here because of $@ assignment. | D.cs:296:16:296:19 | prev | prev | D.cs:296:16:296:26 | Object prev = ... | this |
|
||||
| D.cs:313:17:313:17 | access to local variable s | Variable '$@' may be null here because of $@ assignment. | D.cs:304:16:304:16 | s | s | D.cs:304:16:304:23 | String s = ... | this |
|
||||
| D.cs:324:9:324:9 | access to local variable r | Variable '$@' may be null here because of $@ assignment. | D.cs:316:16:316:16 | r | r | D.cs:316:16:316:23 | Object r = ... | this |
|
||||
| D.cs:346:9:346:11 | access to parameter obj | Variable '$@' may be null here as suggested by $@ null check. | D.cs:333:26:333:28 | obj | obj | D.cs:336:13:336:23 | ... == ... | this |
|
||||
| D.cs:356:13:356:13 | access to local variable a | Variable '$@' may be null here because of $@ assignment. | D.cs:351:15:351:15 | a | a | D.cs:351:15:351:22 | Int32[] a = ... | this |
|
||||
| D.cs:363:13:363:16 | access to local variable last | Variable '$@' may be null here because of $@ assignment. | D.cs:360:20:360:23 | last | last | D.cs:360:20:360:30 | String last = ... | this |
|
||||
| D.cs:372:13:372:13 | access to local variable b | Variable '$@' may be null here because of $@ assignment. | D.cs:366:15:366:15 | b | b | D.cs:366:15:366:47 | Int32[] b = ... | this |
|
||||
@@ -52,7 +50,6 @@
|
||||
| D.cs:412:13:412:13 | access to parameter x | Variable '$@' may be null here as suggested by $@ null check. | D.cs:405:35:405:35 | x | x | D.cs:409:13:409:21 | ... != ... | this |
|
||||
| E.cs:12:38:12:39 | access to local variable a2 | Variable '$@' may be null here because of $@ assignment. | E.cs:9:18:9:19 | a2 | a2 | E.cs:9:18:9:26 | Int64[][] a2 = ... | this |
|
||||
| E.cs:14:13:14:14 | access to local variable a3 | Variable '$@' may be null here because of $@ assignment. | E.cs:11:16:11:17 | a3 | a3 | E.cs:11:16:11:24 | Int64[] a3 = ... | this |
|
||||
| E.cs:27:13:27:14 | access to local variable s1 | Variable '$@' may be null here because of $@ assignment. | E.cs:19:13:19:14 | s1 | s1 | E.cs:19:13:19:30 | String s1 = ... | this |
|
||||
| E.cs:27:13:27:14 | access to local variable s1 | Variable '$@' may be null here because of $@ assignment. | E.cs:19:13:19:14 | s1 | s1 | E.cs:23:13:23:30 | ... = ... | this |
|
||||
| E.cs:35:9:35:12 | access to local variable last | Variable '$@' may be null here because of $@ assignment. | E.cs:32:16:32:19 | last | last | E.cs:32:16:32:26 | String last = ... | this |
|
||||
| E.cs:43:13:43:16 | access to local variable last | Variable '$@' may be null here because of $@ assignment. | E.cs:32:16:32:19 | last | last | E.cs:37:9:37:19 | ... = ... | this |
|
||||
|
||||
Reference in New Issue
Block a user