mirror of
https://github.com/github/codeql.git
synced 2026-05-01 03:35:13 +02:00
C#: Add more nullness tests
Port many of the nullness test from Java, as well as add new tests.
This commit is contained in:
@@ -2,222 +2,66 @@ using System;
|
||||
|
||||
class A
|
||||
{
|
||||
public void notTest()
|
||||
public void Lock()
|
||||
{
|
||||
object not_ok = null;
|
||||
if (!(!(!(not_ok == null))))
|
||||
object synchronizedAlways = null;
|
||||
lock (synchronizedAlways) // BAD (always)
|
||||
{
|
||||
not_ok.GetHashCode();
|
||||
}
|
||||
object not = null;
|
||||
if (!(not != null))
|
||||
{
|
||||
not.GetHashCode();
|
||||
}
|
||||
}
|
||||
public void instanceOf()
|
||||
{
|
||||
object instanceof_ok = null;
|
||||
if (instanceof_ok is string)
|
||||
{
|
||||
instanceof_ok.GetHashCode();
|
||||
synchronizedAlways.GetHashCode(); // GOOD
|
||||
}
|
||||
}
|
||||
|
||||
public void locked()
|
||||
public void ArrayAssignTest()
|
||||
{
|
||||
object synchronized_always = null;
|
||||
lock (synchronized_always)
|
||||
{
|
||||
synchronized_always.GetHashCode();
|
||||
}
|
||||
int[] arrayNull = null;
|
||||
arrayNull[0] = 10; // BAD (always)
|
||||
|
||||
int[] arrayOk;
|
||||
arrayOk = new int[10];
|
||||
arrayOk[0] = 42; // GOOD
|
||||
}
|
||||
|
||||
public void assignIf()
|
||||
public void Access()
|
||||
{
|
||||
string xx;
|
||||
string ok = null;
|
||||
if ((ok = (xx = null)) == null || ok.Length == 0)
|
||||
{
|
||||
}
|
||||
}
|
||||
public void assignIf2()
|
||||
{
|
||||
string ok2 = null;
|
||||
if (foo(ok2 = "hello") || ok2.Length == 0)
|
||||
{
|
||||
}
|
||||
}
|
||||
public void assignIfAnd()
|
||||
{
|
||||
string xx;
|
||||
string ok3 = null;
|
||||
if ((xx = (ok3 = null)) != null && ok3.Length == 0)
|
||||
{
|
||||
}
|
||||
int[] arrayAccess = null;
|
||||
string[] fieldAccess = null;
|
||||
object methodAccess = null;
|
||||
object methodCall = null;
|
||||
|
||||
Console.WriteLine(arrayAccess[1]); // BAD (always)
|
||||
Console.WriteLine(fieldAccess.Length); // BAD (always)
|
||||
Func<String> tmp = methodAccess.ToString; // BAD (always)
|
||||
Console.WriteLine(methodCall.ToString()); // BAD (always)
|
||||
|
||||
Console.WriteLine(arrayAccess[1]); // GOOD
|
||||
Console.WriteLine(fieldAccess.Length); // GOOD
|
||||
tmp = methodAccess.ToString; // GOOD
|
||||
Console.WriteLine(methodCall.ToString()); // GOOD
|
||||
}
|
||||
|
||||
|
||||
public bool foo(string o) { return false; }
|
||||
|
||||
public void dowhile()
|
||||
public void OutOrRef()
|
||||
{
|
||||
string do_ok = "";
|
||||
do
|
||||
{
|
||||
Console.WriteLine(do_ok.Length);
|
||||
do_ok = null;
|
||||
}
|
||||
while (do_ok != null);
|
||||
object varOut = null;
|
||||
TestMethod1(out varOut);
|
||||
varOut.ToString(); // GOOD
|
||||
|
||||
object varRef = null;
|
||||
TestMethod2(ref varRef);
|
||||
varRef.ToString(); // BAD (always) (false negative)
|
||||
|
||||
string do_always = null;
|
||||
do
|
||||
{
|
||||
Console.WriteLine(do_always.Length);
|
||||
do_always = null;
|
||||
}
|
||||
while (do_always != null);
|
||||
|
||||
string do_maybe1 = null;
|
||||
do
|
||||
{
|
||||
Console.WriteLine(do_maybe1.Length);
|
||||
}
|
||||
while (do_maybe1 != null);
|
||||
|
||||
string do_maybe = "";
|
||||
do
|
||||
{
|
||||
Console.WriteLine(do_maybe.Length);
|
||||
do_maybe = null;
|
||||
}
|
||||
while (true);
|
||||
varRef = null;
|
||||
TestMethod3(ref varRef);
|
||||
varRef.ToString(); // GOOD
|
||||
}
|
||||
|
||||
public void while_()
|
||||
{
|
||||
string while_ok = "";
|
||||
while (while_ok != null)
|
||||
{
|
||||
Console.WriteLine(while_ok.Length);
|
||||
while_ok = null;
|
||||
}
|
||||
|
||||
bool TRUE = true;
|
||||
string while_always = null;
|
||||
while (TRUE)
|
||||
{
|
||||
Console.WriteLine(while_always.Length);
|
||||
while_always = null;
|
||||
|
||||
}
|
||||
|
||||
|
||||
string while_maybe = "";
|
||||
while (true)
|
||||
{
|
||||
Console.WriteLine(while_maybe.Length);
|
||||
while_maybe = null;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public void array_assign_test()
|
||||
{
|
||||
int[] array_null = null;
|
||||
array_null[0] = 10;
|
||||
|
||||
int[] array_ok;
|
||||
array_ok = new int[10];
|
||||
array_ok[0] = 42;
|
||||
}
|
||||
|
||||
public void if_()
|
||||
{
|
||||
string if_ok = "";
|
||||
if (if_ok != null)
|
||||
{
|
||||
Console.WriteLine(if_ok.Length);
|
||||
if_ok = null;
|
||||
}
|
||||
|
||||
|
||||
string if_always = null;
|
||||
if (if_always == null)
|
||||
{
|
||||
Console.WriteLine(if_always.Length);
|
||||
if_always = null;
|
||||
}
|
||||
|
||||
string if_maybe = "";
|
||||
if (if_maybe != null && if_maybe.Length % 2 == 0)
|
||||
{
|
||||
if_maybe = null;
|
||||
}
|
||||
Console.WriteLine(if_maybe.Length);
|
||||
}
|
||||
|
||||
public void for_()
|
||||
{
|
||||
string for_ok;
|
||||
for (for_ok = ""; for_ok != null; for_ok = null)
|
||||
{
|
||||
Console.WriteLine(for_ok.Length);
|
||||
}
|
||||
|
||||
Console.WriteLine(for_ok.Length);
|
||||
|
||||
|
||||
for (string for_always = null; for_always == null; for_always = null)
|
||||
{
|
||||
Console.WriteLine(for_always.Length);
|
||||
}
|
||||
|
||||
|
||||
for (string for_maybe = ""; ; for_maybe = null)
|
||||
{
|
||||
Console.WriteLine(for_maybe.Length);
|
||||
}
|
||||
}
|
||||
|
||||
public void access()
|
||||
{
|
||||
int[] arrayaccess = null;
|
||||
string[] fieldaccess = null;
|
||||
Object methodaccess = null;
|
||||
Object methodcall = null;
|
||||
|
||||
Console.WriteLine(arrayaccess[1]);
|
||||
Console.WriteLine(fieldaccess.Length);
|
||||
Func<String> tmp = methodaccess.ToString;
|
||||
Console.WriteLine(methodcall.ToString());
|
||||
|
||||
Console.WriteLine(arrayaccess[1]);
|
||||
Console.WriteLine(fieldaccess.Length);
|
||||
tmp = methodaccess.ToString;
|
||||
Console.WriteLine(methodcall.ToString());
|
||||
}
|
||||
|
||||
public void out_or_ref()
|
||||
{
|
||||
object var_out = null;
|
||||
TestMethod1(out var_out);
|
||||
Console.WriteLine(var_out.ToString());
|
||||
|
||||
object var_ref = null;
|
||||
TestMethod2(ref var_ref);
|
||||
Console.WriteLine(var_ref.ToString());
|
||||
}
|
||||
|
||||
public void lambda_test()
|
||||
public void LambdaTest()
|
||||
{
|
||||
string actual = null;
|
||||
|
||||
MyDelegate fun = e => x => actual = e;
|
||||
|
||||
fun("hello")("world");
|
||||
Console.WriteLine(actual.Length);
|
||||
Console.WriteLine(actual.Length); // GOOD
|
||||
}
|
||||
|
||||
static void TestMethod1(out object num)
|
||||
@@ -229,85 +73,11 @@ class A
|
||||
{
|
||||
}
|
||||
|
||||
static void Main() { }
|
||||
}
|
||||
public delegate MyDelegate2 MyDelegate(string e);
|
||||
public delegate void MyDelegate2(string e);
|
||||
|
||||
class B
|
||||
{
|
||||
public void operatorCall()
|
||||
{
|
||||
B eq_call_always = null;
|
||||
B b2 = null;
|
||||
B b3 = null;
|
||||
B neq_call_always = null;
|
||||
|
||||
if (eq_call_always == null)
|
||||
Console.WriteLine(eq_call_always.ToString());
|
||||
|
||||
if (b2 != null)
|
||||
Console.WriteLine(b2.ToString());
|
||||
|
||||
if (b3 == null) { }
|
||||
else
|
||||
Console.WriteLine(b3.ToString());
|
||||
|
||||
if (neq_call_always != null) { }
|
||||
else
|
||||
Console.WriteLine(neq_call_always.ToString());
|
||||
|
||||
|
||||
|
||||
}
|
||||
public static bool operator ==(B b1, B b2)
|
||||
{
|
||||
return Object.Equals(b1, b2);
|
||||
}
|
||||
public static bool operator !=(B b1, B b2)
|
||||
{
|
||||
return !(b1 == b2);
|
||||
}
|
||||
}
|
||||
public struct CoOrds
|
||||
{
|
||||
public int x, y;
|
||||
|
||||
|
||||
public CoOrds(int p1, int p2)
|
||||
{
|
||||
x = p1;
|
||||
y = p2;
|
||||
}
|
||||
}
|
||||
|
||||
public class Casts
|
||||
{
|
||||
void test()
|
||||
{
|
||||
object o = null;
|
||||
if ((object)o != null)
|
||||
{
|
||||
// GOOD
|
||||
var eq = o.Equals(o);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public class Delegates
|
||||
{
|
||||
delegate void Del();
|
||||
|
||||
class Foo
|
||||
{
|
||||
public static void Run(Del d) { }
|
||||
public void Bar() { }
|
||||
}
|
||||
|
||||
void F()
|
||||
{
|
||||
Foo foo = null;
|
||||
Foo.Run(delegate { foo = new Foo(); });
|
||||
foo.Bar();
|
||||
}
|
||||
static void TestMethod3(ref object num)
|
||||
{
|
||||
num = 42;
|
||||
}
|
||||
|
||||
public delegate MyDelegate2 MyDelegate(string e);
|
||||
public delegate void MyDelegate2(string e);
|
||||
}
|
||||
|
||||
@@ -4,35 +4,51 @@ using Microsoft.VisualStudio.TestTools.UnitTesting;
|
||||
|
||||
class AssertTests
|
||||
{
|
||||
void Fn()
|
||||
void Fn(bool b)
|
||||
{
|
||||
string s = null;
|
||||
string s = b ? null : "";
|
||||
Debug.Assert(s != null);
|
||||
Console.WriteLine(s.Length);
|
||||
Console.WriteLine(s.Length); // GOOD
|
||||
|
||||
s = null;
|
||||
s = b ? null : "";
|
||||
Assert.IsNull(s);
|
||||
Console.WriteLine(s.Length); // always null
|
||||
Console.WriteLine(s.Length); // BAD (always)
|
||||
|
||||
s = null;
|
||||
s = b ? null : "";
|
||||
Assert.IsNotNull(s);
|
||||
Console.WriteLine(s.Length);
|
||||
Console.WriteLine(s.Length); // GOOD
|
||||
|
||||
s = null;
|
||||
s = b ? null : "";
|
||||
Assert.IsTrue(s == null);
|
||||
Console.WriteLine(s.Length); // always null
|
||||
Console.WriteLine(s.Length); // BAD (always)
|
||||
|
||||
s = null;
|
||||
s = b ? null : "";
|
||||
Assert.IsTrue(s != null);
|
||||
Console.WriteLine(s.Length);
|
||||
Console.WriteLine(s.Length); // GOOD
|
||||
|
||||
s = null;
|
||||
s = b ? null : "";
|
||||
Assert.IsFalse(s != null);
|
||||
Console.WriteLine(s.Length); // always null
|
||||
Console.WriteLine(s.Length); // BAD (always)
|
||||
|
||||
s = null;
|
||||
s = b ? null : "";
|
||||
Assert.IsFalse(s == null);
|
||||
Console.WriteLine(s.Length);
|
||||
Console.WriteLine(s.Length); // GOOD
|
||||
|
||||
s = b ? null : "";
|
||||
Assert.IsTrue(s != null && b);
|
||||
Console.WriteLine(s.Length); // GOOD
|
||||
|
||||
s = b ? null : "";
|
||||
Assert.IsFalse(s == null || b);
|
||||
Console.WriteLine(s.Length); // GOOD
|
||||
|
||||
s = b ? null : "";
|
||||
Assert.IsTrue(s == null && b);
|
||||
Console.WriteLine(s.Length); // BAD (always)
|
||||
|
||||
s = b ? null : "";
|
||||
Assert.IsFalse(s != null || b);
|
||||
Console.WriteLine(s.Length); // BAD (always)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
77
csharp/ql/test/query-tests/Nullness/B.cs
Normal file
77
csharp/ql/test/query-tests/Nullness/B.cs
Normal file
@@ -0,0 +1,77 @@
|
||||
using System;
|
||||
|
||||
class B
|
||||
{
|
||||
public void OperatorCall()
|
||||
{
|
||||
B eqCallAlways = null;
|
||||
B b2 = null;
|
||||
B b3 = null;
|
||||
B neqCallAlways = null;
|
||||
|
||||
if (eqCallAlways == null)
|
||||
eqCallAlways.ToString(); // BAD (always)
|
||||
|
||||
if (b2 != null)
|
||||
b2.ToString(); // GOOD
|
||||
|
||||
if (b3 == null) { }
|
||||
else
|
||||
b3.ToString(); // GOOD
|
||||
|
||||
if (neqCallAlways != null) { }
|
||||
else
|
||||
neqCallAlways.ToString(); // BAD (always)
|
||||
}
|
||||
|
||||
public static bool operator ==(B b1, B b2)
|
||||
{
|
||||
return Object.Equals(b1, b2);
|
||||
}
|
||||
|
||||
public static bool operator !=(B b1, B b2)
|
||||
{
|
||||
return !(b1 == b2);
|
||||
}
|
||||
|
||||
public struct CoOrds
|
||||
{
|
||||
public int x, y;
|
||||
|
||||
public CoOrds(int p1, int p2)
|
||||
{
|
||||
x = p1;
|
||||
y = p2;
|
||||
}
|
||||
}
|
||||
|
||||
public class Casts
|
||||
{
|
||||
void test()
|
||||
{
|
||||
object o = null;
|
||||
if ((object)o != null)
|
||||
{
|
||||
var eq = o.Equals(o); // GOOD
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public class Delegates
|
||||
{
|
||||
delegate void Del();
|
||||
|
||||
class Foo
|
||||
{
|
||||
public static void Run(Del d) => d();
|
||||
public void Bar() { }
|
||||
}
|
||||
|
||||
void F()
|
||||
{
|
||||
Foo foo = null;
|
||||
Foo.Run(delegate { foo = new Foo(); });
|
||||
foo.Bar(); // GOOD
|
||||
}
|
||||
}
|
||||
}
|
||||
275
csharp/ql/test/query-tests/Nullness/C.cs
Normal file
275
csharp/ql/test/query-tests/Nullness/C.cs
Normal file
@@ -0,0 +1,275 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Diagnostics;
|
||||
using Microsoft.VisualStudio.TestTools.UnitTesting;
|
||||
|
||||
public class C
|
||||
{
|
||||
public void NotTest()
|
||||
{
|
||||
object o = null;
|
||||
if (!(!(!(o == null))))
|
||||
{
|
||||
o.GetHashCode(); // GOOD
|
||||
}
|
||||
|
||||
if (!(o != null))
|
||||
{
|
||||
o.GetHashCode(); // BAD (always)
|
||||
}
|
||||
}
|
||||
|
||||
public void AssertNull(object o)
|
||||
{
|
||||
if (o != null)
|
||||
throw new Exception("not null");
|
||||
}
|
||||
|
||||
static bool IsNull(object o) => o == null;
|
||||
|
||||
static bool IsNotNull(object o) => o != null;
|
||||
|
||||
public void AssertNonNull(object o)
|
||||
{
|
||||
if (o == null)
|
||||
throw new Exception("null");
|
||||
}
|
||||
|
||||
public void AssertTest()
|
||||
{
|
||||
var s = Maybe() ? null : "";
|
||||
Debug.Assert(s == null);
|
||||
s.ToString(); // BAD (always)
|
||||
|
||||
s = Maybe() ? null : "";
|
||||
Debug.Assert(s != null);
|
||||
s.ToString(); // GOOD
|
||||
}
|
||||
|
||||
public void AssertNullTest()
|
||||
{
|
||||
var o1 = new object();
|
||||
AssertNull(o1);
|
||||
o1.ToString(); // BAD (always) (false negative)
|
||||
|
||||
var o2 = Maybe() ? null : "";
|
||||
Assert.IsNull(o2);
|
||||
o2.ToString(); // BAD (always)
|
||||
}
|
||||
|
||||
public void AssertNotNullTest()
|
||||
{
|
||||
var o1 = Maybe() ? null : new object();
|
||||
AssertNonNull(o1);
|
||||
o1.ToString(); // GOOD (false positive)
|
||||
|
||||
var o2 = Maybe() ? null : new object();
|
||||
AssertNonNull(o1);
|
||||
o2.ToString(); // BAD (maybe)
|
||||
|
||||
var o3 = Maybe() ? null : new object();
|
||||
Assert.IsNotNull(o3);
|
||||
o3.ToString(); // GOOD
|
||||
}
|
||||
|
||||
public void TestNull()
|
||||
{
|
||||
object o = null;
|
||||
if (IsNotNull(o))
|
||||
o.ToString(); // GOOD
|
||||
|
||||
|
||||
if (!IsNull(o))
|
||||
o.ToString(); // GOOD
|
||||
}
|
||||
|
||||
public void InstanceOf()
|
||||
{
|
||||
object o = null;
|
||||
if (o is string)
|
||||
o.ToString(); // GOOD
|
||||
}
|
||||
|
||||
public void Lock()
|
||||
{
|
||||
var o = Maybe() ? null : new object();
|
||||
lock (o) // BAD (maybe)
|
||||
o.ToString(); // GOOD
|
||||
}
|
||||
|
||||
public void Foreach(IEnumerable<int> list)
|
||||
{
|
||||
if (Maybe())
|
||||
list = null;
|
||||
foreach (var x in list) // BAD (maybe) (false negative)
|
||||
{
|
||||
x.ToString(); // GOOD
|
||||
list.ToString(); // GOOD
|
||||
}
|
||||
}
|
||||
|
||||
public void Conditional()
|
||||
{
|
||||
string colours = null;
|
||||
var colour = colours == null || colours.Length == 0 ? "Black" : colours.ToString(); // GOOD
|
||||
}
|
||||
|
||||
public void Simple()
|
||||
{
|
||||
string[] children = null;
|
||||
var comparator = "";
|
||||
if (children == null)
|
||||
children = new string[0];
|
||||
if (children.Length > 1) { } // GOOD
|
||||
}
|
||||
|
||||
public void AssignIf()
|
||||
{
|
||||
string xx;
|
||||
String ok = null;
|
||||
if ((ok = (xx = null)) == null || ok.Length > 0) // GOOD
|
||||
;
|
||||
}
|
||||
|
||||
public void AssignIf2()
|
||||
{
|
||||
bool Foo(string o) => false;
|
||||
string ok2 = null;
|
||||
if (Foo(ok2 = "hello") || ok2.Length > 0) // GOOD
|
||||
;
|
||||
}
|
||||
|
||||
public void AssignIfAnd()
|
||||
{
|
||||
string xx;
|
||||
string ok3 = null;
|
||||
if ((xx = (ok3 = null)) != null && ok3.Length > 0) // GOOD
|
||||
;
|
||||
}
|
||||
|
||||
public void DoWhile()
|
||||
{
|
||||
var s = "";
|
||||
do
|
||||
{
|
||||
s.ToString(); // GOOD
|
||||
s = null;
|
||||
}
|
||||
while (s != null);
|
||||
|
||||
s = null;
|
||||
do
|
||||
{
|
||||
s.ToString(); // BAD (always)
|
||||
s = null;
|
||||
}
|
||||
while (s != null);
|
||||
|
||||
s = null;
|
||||
do
|
||||
{
|
||||
s.ToString(); // BAD (always) (reported as maybe)
|
||||
}
|
||||
while (s != null);
|
||||
|
||||
s = "";
|
||||
do
|
||||
{
|
||||
s.ToString(); // BAD (maybe)
|
||||
s = null;
|
||||
}
|
||||
while (true);
|
||||
}
|
||||
|
||||
public void While()
|
||||
{
|
||||
var s = "";
|
||||
while (s != null)
|
||||
{
|
||||
s.ToString(); // GOOD
|
||||
s = null;
|
||||
}
|
||||
|
||||
var b = true;
|
||||
s = null;
|
||||
while (b)
|
||||
{
|
||||
s.ToString(); // BAD (always)
|
||||
s = null;
|
||||
}
|
||||
|
||||
s = "";
|
||||
while (true)
|
||||
{
|
||||
s.ToString(); // BAD (maybe)
|
||||
s = null;
|
||||
}
|
||||
}
|
||||
|
||||
public void If()
|
||||
{
|
||||
var s = Maybe() ? null : "";
|
||||
if (s != null)
|
||||
{
|
||||
s.ToString(); // GOOD
|
||||
s = null;
|
||||
}
|
||||
|
||||
if (s == null)
|
||||
s.ToString(); // BAD (always)
|
||||
|
||||
s = "";
|
||||
if (s != null && s.Length % 2 == 0)
|
||||
s = null;
|
||||
s.ToString(); // BAD (maybe)
|
||||
}
|
||||
|
||||
public void For()
|
||||
{
|
||||
String s;
|
||||
for (s = ""; s != null; s = null)
|
||||
{
|
||||
s.ToString(); // GOOD
|
||||
}
|
||||
s.ToString(); // BAD (always)
|
||||
|
||||
for (s = null; s == null; s = null)
|
||||
{
|
||||
s.ToString(); // BAD (always)
|
||||
}
|
||||
|
||||
for (s = ""; ; s = null)
|
||||
{
|
||||
s.ToString(); // BAD (maybe)
|
||||
}
|
||||
}
|
||||
|
||||
public void ArrayAssignTest()
|
||||
{
|
||||
int[] a = null;
|
||||
a[0] = 10; // BAD (always)
|
||||
|
||||
a = new int[10];
|
||||
a[0] = 42; // GOOD
|
||||
}
|
||||
|
||||
public void Access()
|
||||
{
|
||||
int[] ia = null;
|
||||
string[] sa = null;
|
||||
|
||||
ia[1] = 0; // BAD (always)
|
||||
var temp = sa.Length; // BAD (always)
|
||||
|
||||
ia[1] = 0; // BAD (always), but not first
|
||||
temp = sa.Length; // BAD (always), but not first
|
||||
}
|
||||
|
||||
bool m;
|
||||
C(bool m)
|
||||
{
|
||||
this.m = m;
|
||||
}
|
||||
|
||||
bool Maybe() => this.m;
|
||||
}
|
||||
414
csharp/ql/test/query-tests/Nullness/D.cs
Normal file
414
csharp/ql/test/query-tests/Nullness/D.cs
Normal file
@@ -0,0 +1,414 @@
|
||||
using System;
|
||||
using System.Diagnostics;
|
||||
|
||||
public class D
|
||||
{
|
||||
private bool maybe;
|
||||
public bool flag;
|
||||
public D(bool b, bool f)
|
||||
{
|
||||
this.maybe = b;
|
||||
this.flag = f;
|
||||
}
|
||||
|
||||
public void Caller()
|
||||
{
|
||||
Callee1(new object());
|
||||
Callee1(null);
|
||||
Callee2(new object());
|
||||
}
|
||||
|
||||
public void Callee1(object param)
|
||||
{
|
||||
param.ToString(); // BAD (maybe) (false negative)
|
||||
}
|
||||
|
||||
public void Callee2(object param)
|
||||
{
|
||||
if (param != null)
|
||||
{
|
||||
param.ToString(); // GOOD
|
||||
}
|
||||
param.ToString(); // BAD (maybe) (false negative)
|
||||
}
|
||||
|
||||
private static bool CustomIsNull(object x)
|
||||
{
|
||||
if (x is string) return false;
|
||||
if (x == null) return true;
|
||||
return x == null;
|
||||
}
|
||||
|
||||
public void NullGuards()
|
||||
{
|
||||
var o1 = maybe ? null : new object();
|
||||
if (o1 != null) o1.ToString(); // GOOD
|
||||
|
||||
var o2 = maybe ? null : "";
|
||||
if (o2 is string) o2.ToString(); // GOOD
|
||||
|
||||
object o3 = null;
|
||||
if ((o3 = maybe ? null : "") != null)
|
||||
o3.ToString(); // GOOD
|
||||
|
||||
var o4 = maybe ? null : "";
|
||||
if ((2 > 1 && o4 != null) != false)
|
||||
o4.ToString(); // GOOD
|
||||
|
||||
var o5 = (o4 != null) ? "" : null;
|
||||
if (o5 != null)
|
||||
o4.ToString(); // GOOD (false positive)
|
||||
if (o4 != null)
|
||||
o5.ToString(); // GOOD (false positive)
|
||||
|
||||
var o6 = maybe ? null : "";
|
||||
if (!CustomIsNull(o6))
|
||||
o6.ToString(); // GOOD
|
||||
|
||||
var o7 = maybe ? null : "";
|
||||
var ok = o7 != null && 2 > 1;
|
||||
if (ok)
|
||||
o7.ToString(); // GOOD
|
||||
else
|
||||
o7.ToString(); // BAD (maybe)
|
||||
|
||||
var o8 = maybe ? null : "";
|
||||
int track = o8 == null ? 42 : 1 + 1;
|
||||
if (track == 2)
|
||||
o8.ToString(); // GOOD (false positive)
|
||||
if (track != 42)
|
||||
o8.ToString(); // GOOD (false positive)
|
||||
if (track < 42)
|
||||
o8.ToString(); // GOOD (false positive)
|
||||
if (track <= 41)
|
||||
o8.ToString(); // GOOD (false positive)
|
||||
}
|
||||
|
||||
public void Deref(int i)
|
||||
{
|
||||
int[] xs = maybe ? null : new int[2];
|
||||
if (i > 1)
|
||||
xs[0] = 5; // BAD (maybe)
|
||||
|
||||
if (i > 2)
|
||||
maybe = xs[1] > 5; // BAD (maybe)
|
||||
|
||||
if (i > 3)
|
||||
{
|
||||
var l = xs.Length; // BAD (maybe)
|
||||
}
|
||||
|
||||
if (i > 4)
|
||||
foreach (var _ in xs) ; // BAD (maybe) (false negative)
|
||||
|
||||
if (i > 5)
|
||||
lock (xs) // BAD (maybe)
|
||||
xs.ToString(); // Not reported - same basic block
|
||||
|
||||
if (i > 6)
|
||||
{
|
||||
Debug.Assert(xs != null);
|
||||
xs[0] = xs[1]; // GOOD
|
||||
}
|
||||
}
|
||||
|
||||
public void F(bool b)
|
||||
{
|
||||
var x = b ? null : "abc";
|
||||
x = x == null ? "" : x;
|
||||
if (x == null)
|
||||
x.ToString(); // BAD (always) (false negative)
|
||||
else
|
||||
x.ToString(); // GOOD
|
||||
}
|
||||
|
||||
public void LengthGuard(int[] a, int[] b)
|
||||
{
|
||||
int alen = a == null ? 0 : a.Length; // GOOD
|
||||
int blen = b == null ? 0 : b.Length; // GOOD
|
||||
var sum = 0;
|
||||
if (alen == blen)
|
||||
{
|
||||
for (int i = 0; i < alen; i++)
|
||||
{
|
||||
sum += a[i]; // GOOD
|
||||
sum += b[i]; // GOOD
|
||||
}
|
||||
}
|
||||
int alen2;
|
||||
if (a != null)
|
||||
alen2 = a.Length; // GOOD
|
||||
else
|
||||
alen2 = 0;
|
||||
for (int i = 1; i <= alen2; ++i)
|
||||
{
|
||||
sum += a[i - 1]; // GOOD
|
||||
}
|
||||
}
|
||||
|
||||
public void MissedGuard(object obj)
|
||||
{
|
||||
obj.ToString(); // BAD (maybe) (false negative)
|
||||
var x = obj != null ? 1 : 0;
|
||||
}
|
||||
|
||||
private object MkMaybe()
|
||||
{
|
||||
if (maybe) throw new Exception();
|
||||
return new object();
|
||||
}
|
||||
|
||||
public void Exceptions()
|
||||
{
|
||||
object obj = null;
|
||||
try
|
||||
{
|
||||
obj = MkMaybe();
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
}
|
||||
obj.ToString(); // BAD (maybe)
|
||||
|
||||
object obj2 = null;
|
||||
try
|
||||
{
|
||||
obj2 = MkMaybe();
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
Debug.Assert(false);
|
||||
}
|
||||
obj2.ToString(); // GOOD
|
||||
|
||||
object obj3 = null;
|
||||
try
|
||||
{
|
||||
obj3 = MkMaybe();
|
||||
}
|
||||
finally { }
|
||||
obj3.ToString(); // GOOD
|
||||
}
|
||||
|
||||
public void ClearNotNull()
|
||||
{
|
||||
var o = new Object();
|
||||
if (o == null)
|
||||
o.ToString(); // BAD (always) (false negative)
|
||||
o.ToString(); // GOOD
|
||||
|
||||
try
|
||||
{
|
||||
MkMaybe();
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
if (e == null)
|
||||
e.ToString(); // BAD (always) (false negative)
|
||||
e.ToString(); // GOOD
|
||||
}
|
||||
|
||||
object n = null;
|
||||
var o2 = n == null ? new Object() : n;
|
||||
o2.ToString(); // GOOD
|
||||
|
||||
var o3 = "abc";
|
||||
if (o3 == null)
|
||||
o3.ToString(); // BAD (always) (false negative)
|
||||
o3.ToString(); // GOOD
|
||||
|
||||
var o4 = "" + null;
|
||||
if (o4 == null)
|
||||
o4.ToString(); // BAD (always) (false negative)
|
||||
o4.ToString(); // GOOD
|
||||
}
|
||||
|
||||
public void CorrelatedConditions(bool cond, int num)
|
||||
{
|
||||
object o = null;
|
||||
if (cond)
|
||||
o = new Object();
|
||||
if (cond)
|
||||
o.ToString(); // GOOD
|
||||
|
||||
o = null;
|
||||
if (flag)
|
||||
o = "";
|
||||
if (flag)
|
||||
o.ToString(); // GOOD
|
||||
|
||||
o = null;
|
||||
var other = maybe ? null : "";
|
||||
if (other == null)
|
||||
o = "";
|
||||
if (other != null)
|
||||
o.ToString(); // BAD (always) (reported as maybe)
|
||||
else
|
||||
o.ToString(); // GOOD (false positive)
|
||||
|
||||
var o2 = (num < 0) ? null : "";
|
||||
if (num < 0)
|
||||
o2 = "";
|
||||
else
|
||||
o2.ToString(); // GOOD (false positive)
|
||||
}
|
||||
|
||||
public void TrackingVariable(int[] a)
|
||||
{
|
||||
object o = null;
|
||||
object other = null;
|
||||
if (maybe)
|
||||
{
|
||||
o = "abc";
|
||||
other = "def";
|
||||
}
|
||||
|
||||
if (other is string)
|
||||
o.ToString(); // GOOD (false positive)
|
||||
|
||||
o = null;
|
||||
int count = 0;
|
||||
var found = false;
|
||||
for (var i = 0; i < a.Length; i++)
|
||||
{
|
||||
if (a[i] == 42)
|
||||
{
|
||||
o = ((int)a[i]).ToString();
|
||||
count++;
|
||||
if (2 > i) { }
|
||||
found = true;
|
||||
}
|
||||
if (a[i] > 10000)
|
||||
{
|
||||
o = null;
|
||||
count = 0;
|
||||
if (2 > i) { }
|
||||
found = false;
|
||||
}
|
||||
}
|
||||
|
||||
if (count > 3)
|
||||
o.ToString(); // GOOD (false positive)
|
||||
|
||||
if (found)
|
||||
o.ToString(); // GOOD (false positive)
|
||||
|
||||
object prev = null;
|
||||
for (var i = 0; i < a.Length; ++i)
|
||||
{
|
||||
if (i != 0)
|
||||
prev.ToString(); // GOOD (false positive)
|
||||
prev = a[i];
|
||||
}
|
||||
|
||||
string s = null;
|
||||
{
|
||||
var s_null = true;
|
||||
foreach (var i in a)
|
||||
{
|
||||
s_null = false;
|
||||
s = "" + a;
|
||||
}
|
||||
if (!s_null)
|
||||
s.ToString(); // GOOD (false positive)
|
||||
}
|
||||
|
||||
object r = null;
|
||||
var stat = MyStatus.INIT;
|
||||
while (stat == MyStatus.INIT && stat != MyStatus.READY)
|
||||
{
|
||||
r = MkMaybe();
|
||||
if (stat == MyStatus.INIT)
|
||||
stat = MyStatus.READY;
|
||||
}
|
||||
r.ToString(); // GOOD (false positive)
|
||||
}
|
||||
|
||||
public enum MyStatus
|
||||
{
|
||||
READY,
|
||||
INIT
|
||||
}
|
||||
|
||||
public void G(object obj)
|
||||
{
|
||||
string msg = null;
|
||||
if (obj == null)
|
||||
msg = "foo";
|
||||
else if (obj.GetHashCode() > 7) // GOOD
|
||||
msg = "bar";
|
||||
|
||||
if (msg != null)
|
||||
{
|
||||
msg += "foobar";
|
||||
throw new Exception(msg);
|
||||
}
|
||||
obj.ToString(); // GOOD
|
||||
}
|
||||
|
||||
public void LoopCorr(int iters)
|
||||
{
|
||||
int[] a = null;
|
||||
if (iters > 0)
|
||||
a = new int[iters];
|
||||
|
||||
for (var i = 0; i < iters; ++i)
|
||||
a[i] = 0; // GOOD (false positive)
|
||||
|
||||
if (iters > 0)
|
||||
{
|
||||
string last = null;
|
||||
for (var i = 0; i < iters; i++)
|
||||
last = "abc";
|
||||
last.ToString(); // GOOD (false positive)
|
||||
}
|
||||
|
||||
int[] b = maybe ? null : new int[iters];
|
||||
if (iters > 0 && (b == null || b.Length < iters))
|
||||
throw new Exception();
|
||||
|
||||
for (var i = 0; i < iters; ++i)
|
||||
{
|
||||
b[i] = 0; // GOOD (false positive)
|
||||
}
|
||||
}
|
||||
|
||||
void Test(Exception e, bool b)
|
||||
{
|
||||
Exception ioe = null;
|
||||
if (b)
|
||||
ioe = new Exception("");
|
||||
|
||||
if (ioe != null)
|
||||
ioe = e;
|
||||
else
|
||||
ioe.ToString(); // BAD (always)
|
||||
}
|
||||
|
||||
public void LengthGuard2(int[] a, int[] b)
|
||||
{
|
||||
int alen = a == null ? 0 : a.Length; // GOOD
|
||||
int sum = 0;
|
||||
int i;
|
||||
for (i = 0; i < alen; i++)
|
||||
{
|
||||
sum += a[i]; // GOOD
|
||||
}
|
||||
int blen = b == null ? 0 : b.Length; // GOOD
|
||||
for (i = 0; i < blen; i++)
|
||||
{
|
||||
sum += b[i]; // GOOD
|
||||
}
|
||||
i = -3;
|
||||
}
|
||||
|
||||
public void CorrConds2(object x, object y)
|
||||
{
|
||||
if ((x != null && y == null) || (x == null && y != null))
|
||||
return;
|
||||
if (x != null)
|
||||
y.ToString(); // GOOD
|
||||
if (y != null)
|
||||
x.ToString(); // GOOD
|
||||
}
|
||||
}
|
||||
271
csharp/ql/test/query-tests/Nullness/E.cs
Normal file
271
csharp/ql/test/query-tests/Nullness/E.cs
Normal file
@@ -0,0 +1,271 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
|
||||
public class E
|
||||
{
|
||||
public void Ex1(long[][][] a1, int ix, int len)
|
||||
{
|
||||
long[][] a2 = null;
|
||||
var haveA2 = ix < len && (a2 = a1[ix]) != null;
|
||||
long[] a3 = null;
|
||||
var haveA3 = haveA2 && (a3 = a2[ix]) != null; // GOOD (false positive)
|
||||
if (haveA3)
|
||||
a3[0] = 0; // GOOD (false positive)
|
||||
}
|
||||
|
||||
public void Ex2(bool x, bool y)
|
||||
{
|
||||
var s1 = x ? null : "";
|
||||
var s2 = (s1 == null) ? null : "";
|
||||
if (s2 == null)
|
||||
{
|
||||
s1 = y ? null : "";
|
||||
s2 = (s1 == null) ? null : "";
|
||||
}
|
||||
if (s2 != null)
|
||||
s1.ToString(); // GOOD (false positive)
|
||||
}
|
||||
|
||||
public void Ex3(IEnumerable<string> ss)
|
||||
{
|
||||
string last = null;
|
||||
foreach (var s in new string[] { "aa", "bb" })
|
||||
last = s;
|
||||
last.ToString(); // GOOD (false positive)
|
||||
|
||||
last = null;
|
||||
if (ss.Any())
|
||||
{
|
||||
foreach (var s in ss)
|
||||
last = s;
|
||||
|
||||
last.ToString(); // GOOD (false positive)
|
||||
}
|
||||
}
|
||||
|
||||
public void Ex4(IEnumerable<string> list, int step)
|
||||
{
|
||||
int index = 0;
|
||||
var result = new List<List<string>>();
|
||||
List<string> slice = null;
|
||||
var iter = list.GetEnumerator();
|
||||
while (iter.MoveNext())
|
||||
{
|
||||
var str = iter.Current;
|
||||
if (index % step == 0)
|
||||
{
|
||||
slice = new List<string>();
|
||||
result.Add(slice);
|
||||
}
|
||||
slice.Add(str); // GOOD (false positive)
|
||||
++index;
|
||||
}
|
||||
}
|
||||
|
||||
public void Ex5(bool hasArr, int[] arr)
|
||||
{
|
||||
int arrLen = 0;
|
||||
if (hasArr)
|
||||
arrLen = arr == null ? 0 : arr.Length;
|
||||
|
||||
if (arrLen > 0)
|
||||
arr[0] = 0; // GOOD
|
||||
}
|
||||
|
||||
public const int MY_CONST_A = 1;
|
||||
public const int MY_CONST_B = 2;
|
||||
public const int MY_CONST_C = 3;
|
||||
|
||||
public void Ex6(int[] vals, bool b1, bool b2)
|
||||
{
|
||||
int switchguard;
|
||||
if (vals != null && b1)
|
||||
switchguard = MY_CONST_A;
|
||||
else if (vals != null && b2)
|
||||
switchguard = MY_CONST_B;
|
||||
else
|
||||
switchguard = MY_CONST_C;
|
||||
|
||||
switch (switchguard)
|
||||
{
|
||||
case MY_CONST_A:
|
||||
vals[0] = 0; // GOOD
|
||||
break;
|
||||
case MY_CONST_C:
|
||||
break;
|
||||
case MY_CONST_B:
|
||||
vals[0] = 0; // GOOD
|
||||
break;
|
||||
default:
|
||||
throw new Exception();
|
||||
}
|
||||
}
|
||||
|
||||
public void Ex7(int[] arr1)
|
||||
{
|
||||
int[] arr2 = null;
|
||||
if (arr1.Length > 0)
|
||||
arr2 = new int[arr1.Length];
|
||||
|
||||
for (var i = 0; i < arr1.Length; i++)
|
||||
arr2[i] = arr1[i]; // GOOD (false positive)
|
||||
}
|
||||
|
||||
public void Ex8(int x, int lim)
|
||||
{
|
||||
bool stop = x < 1;
|
||||
int i = 0;
|
||||
var obj = new object();
|
||||
while (!stop)
|
||||
{
|
||||
int j = 0;
|
||||
while (!stop && j < lim)
|
||||
{
|
||||
int step = (j * obj.GetHashCode()) % 10; // GOOD (false positive)
|
||||
if (step == 0)
|
||||
{
|
||||
obj.ToString(); // GOOD
|
||||
i += 1;
|
||||
stop = i >= x;
|
||||
if (!stop)
|
||||
{
|
||||
obj = new object();
|
||||
}
|
||||
else
|
||||
{
|
||||
obj = null;
|
||||
}
|
||||
continue;
|
||||
}
|
||||
j += step;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void Ex9(bool cond, object obj1)
|
||||
{
|
||||
if (cond)
|
||||
{
|
||||
return;
|
||||
}
|
||||
object obj2 = obj1;
|
||||
if (obj2 != null && obj2.GetHashCode() % 5 > 2)
|
||||
{
|
||||
obj2.ToString(); // GOOD
|
||||
cond = true;
|
||||
}
|
||||
if (cond)
|
||||
obj2.ToString(); // GOOD
|
||||
}
|
||||
|
||||
public void Ex10(int[] a)
|
||||
{
|
||||
int n = a == null ? 0 : a.Length;
|
||||
for (var i = 0; i < n; i++)
|
||||
{
|
||||
int x = a[i]; // GOOD
|
||||
if (x > 7)
|
||||
a = new int[n];
|
||||
}
|
||||
}
|
||||
|
||||
public void Ex11(object obj, bool b1)
|
||||
{
|
||||
bool b2 = obj == null ? false : b1;
|
||||
if (b2 == null)
|
||||
{
|
||||
obj.ToString(); // GOOD
|
||||
}
|
||||
if (obj == null)
|
||||
{
|
||||
b1 = true;
|
||||
}
|
||||
if (b1 == null)
|
||||
{
|
||||
obj.ToString(); // GOOD
|
||||
}
|
||||
}
|
||||
|
||||
public void Ex12(object o)
|
||||
{
|
||||
var i = o.GetHashCode(); // BAD (maybe) (false negative)
|
||||
var s = o?.ToString();
|
||||
}
|
||||
|
||||
public void Ex13(bool b)
|
||||
{
|
||||
var o = b ? null : "";
|
||||
o.M1(); // GOOD
|
||||
if (b)
|
||||
o.M2(); // BAD (maybe) (false negative)
|
||||
else
|
||||
o.Select(x => x); // BAD (maybe) (false negative)
|
||||
}
|
||||
|
||||
public int Ex14(string s)
|
||||
{
|
||||
if (s is string)
|
||||
return s.Length;
|
||||
return s.GetHashCode(); // BAD (always) (false negative)
|
||||
}
|
||||
|
||||
public void Ex15(bool b)
|
||||
{
|
||||
var x = "";
|
||||
if (b)
|
||||
x = null;
|
||||
x.ToString(); // BAD (maybe)
|
||||
if (b)
|
||||
x.ToString(); // BAD (always) (false negative)
|
||||
}
|
||||
|
||||
public void Ex16(bool b)
|
||||
{
|
||||
var x = "";
|
||||
if (b)
|
||||
x = null;
|
||||
if (b)
|
||||
x.ToString(); // BAD (always)
|
||||
x.ToString(); // BAD (maybe) (false negative)
|
||||
}
|
||||
|
||||
public int Ex17(int? i)
|
||||
{
|
||||
return i.Value; // BAD (maybe) (false negative)
|
||||
}
|
||||
|
||||
public int Ex18(int? i)
|
||||
{
|
||||
return (int)i; // BAD (maybe) (false negative)
|
||||
}
|
||||
|
||||
public int Ex19(int? i)
|
||||
{
|
||||
if (i.HasValue)
|
||||
return i.Value; // GOOD
|
||||
return -1;
|
||||
}
|
||||
|
||||
public int Ex20(int? i)
|
||||
{
|
||||
if (i != null)
|
||||
return i.Value; // GOOD
|
||||
return -1;
|
||||
}
|
||||
|
||||
public int Ex21(int? i)
|
||||
{
|
||||
if (i == null)
|
||||
i = 0;
|
||||
return i.Value; // GOOD
|
||||
}
|
||||
}
|
||||
|
||||
public static class Extensions
|
||||
{
|
||||
public static void M1(this string s) { }
|
||||
public static int M2(this string s) => s.Length;
|
||||
}
|
||||
|
||||
// semmle-extractor-options: /r:System.Linq.dll
|
||||
@@ -8,36 +8,36 @@ class ForwardingTests
|
||||
|
||||
if (!s.IsNullOrEmpty())
|
||||
{
|
||||
Console.WriteLine(s.Length);
|
||||
Console.WriteLine(s.Length); // GOOD
|
||||
}
|
||||
|
||||
if (s.IsNotNullOrEmpty())
|
||||
{
|
||||
Console.WriteLine(s.Length);
|
||||
Console.WriteLine(s.Length); // GOOD
|
||||
}
|
||||
|
||||
if (!s.IsNull())
|
||||
{
|
||||
Console.WriteLine(s.Length);
|
||||
Console.WriteLine(s.Length); // GOOD
|
||||
}
|
||||
|
||||
if (s.IsNotNull())
|
||||
{
|
||||
Console.WriteLine(s.Length);
|
||||
Console.WriteLine(s.Length); // GOOD
|
||||
}
|
||||
|
||||
if (IsNotNull(s))
|
||||
{
|
||||
Console.WriteLine(s.Length);
|
||||
Console.WriteLine(s.Length); // GOOD
|
||||
}
|
||||
|
||||
if (IsNotNullWrong(s))
|
||||
{
|
||||
Console.WriteLine(s.Length); // maybe null
|
||||
Console.WriteLine(s.Length); // BAD (always) (reported as maybe)
|
||||
}
|
||||
|
||||
AssertIsNotNull(s);
|
||||
Console.WriteLine(s.Length); // FP; not currently handled
|
||||
Console.WriteLine(s.Length); // GOOD (false positive)
|
||||
}
|
||||
|
||||
bool IsNotNull(object o)
|
||||
|
||||
@@ -2,9 +2,9 @@ using System;
|
||||
|
||||
class GuardedStringTest
|
||||
{
|
||||
void Fn()
|
||||
void Fn(bool b)
|
||||
{
|
||||
string s = null;
|
||||
string s = b ? null : "";
|
||||
|
||||
if (!string.IsNullOrEmpty(s))
|
||||
{
|
||||
@@ -17,23 +17,23 @@ class GuardedStringTest
|
||||
}
|
||||
|
||||
if (s?.Length == 0)
|
||||
Console.WriteLine(s.Length); // null guarded
|
||||
Console.WriteLine(s.Length); // GOOD
|
||||
|
||||
if (s?.Length > 0)
|
||||
Console.WriteLine(s.Length); // null guarded
|
||||
Console.WriteLine(s.Length); // GOOD
|
||||
|
||||
if (s?.Length >= 0)
|
||||
Console.WriteLine(s.Length); // null guarded
|
||||
Console.WriteLine(s.Length); // GOOD
|
||||
|
||||
if (s?.Length < 10)
|
||||
Console.WriteLine(s.Length); // null guarded
|
||||
Console.WriteLine(s.Length); // GOOD
|
||||
|
||||
if (s?.Length <= 10)
|
||||
Console.WriteLine(s.Length); // null guarded
|
||||
Console.WriteLine(s.Length); // GOOD
|
||||
|
||||
if (s?.Length != 0)
|
||||
Console.WriteLine(s.Length); // not null guarded
|
||||
Console.WriteLine(s.Length); // BAD (maybe)
|
||||
else
|
||||
Console.WriteLine(s.Length); // null guarded
|
||||
Console.WriteLine(s.Length); // GOOD
|
||||
}
|
||||
}
|
||||
|
||||
747
csharp/ql/test/query-tests/Nullness/Implications.expected
Normal file
747
csharp/ql/test/query-tests/Nullness/Implications.expected
Normal file
@@ -0,0 +1,747 @@
|
||||
| A.cs:8:15:8:32 | access to local variable synchronizedAlways | non-null | A.cs:7:37:7:40 | null | non-null |
|
||||
| A.cs:8:15:8:32 | access to local variable synchronizedAlways | null | A.cs:7:37:7:40 | null | null |
|
||||
| A.cs:10:13:10:30 | access to local variable synchronizedAlways | non-null | A.cs:7:37:7:40 | null | non-null |
|
||||
| A.cs:10:13:10:30 | access to local variable synchronizedAlways | null | A.cs:7:37:7:40 | null | null |
|
||||
| A.cs:17:9:17:17 | access to local variable arrayNull | non-null | A.cs:16:27:16:30 | null | non-null |
|
||||
| A.cs:17:9:17:17 | access to local variable arrayNull | null | A.cs:16:27:16:30 | null | null |
|
||||
| A.cs:21:9:21:15 | access to local variable arrayOk | non-null | A.cs:20:19:20:29 | array creation of type Int32[] | non-null |
|
||||
| A.cs:21:9:21:15 | access to local variable arrayOk | null | A.cs:20:19:20:29 | array creation of type Int32[] | null |
|
||||
| A.cs:31:27:31:37 | access to local variable arrayAccess | non-null | A.cs:26:29:26:32 | null | non-null |
|
||||
| A.cs:31:27:31:37 | access to local variable arrayAccess | null | A.cs:26:29:26:32 | null | null |
|
||||
| A.cs:32:27:32:37 | access to local variable fieldAccess | non-null | A.cs:27:32:27:35 | null | non-null |
|
||||
| A.cs:32:27:32:37 | access to local variable fieldAccess | null | A.cs:27:32:27:35 | null | null |
|
||||
| A.cs:33:28:33:39 | access to local variable methodAccess | non-null | A.cs:28:31:28:34 | null | non-null |
|
||||
| A.cs:33:28:33:39 | access to local variable methodAccess | null | A.cs:28:31:28:34 | null | null |
|
||||
| A.cs:34:27:34:36 | access to local variable methodCall | non-null | A.cs:29:29:29:32 | null | non-null |
|
||||
| A.cs:34:27:34:36 | access to local variable methodCall | null | A.cs:29:29:29:32 | null | null |
|
||||
| A.cs:36:27:36:37 | access to local variable arrayAccess | non-null | A.cs:26:29:26:32 | null | non-null |
|
||||
| A.cs:36:27:36:37 | access to local variable arrayAccess | null | A.cs:26:29:26:32 | null | null |
|
||||
| A.cs:37:27:37:37 | access to local variable fieldAccess | non-null | A.cs:27:32:27:35 | null | non-null |
|
||||
| A.cs:37:27:37:37 | access to local variable fieldAccess | null | A.cs:27:32:27:35 | null | null |
|
||||
| A.cs:38:15:38:26 | access to local variable methodAccess | non-null | A.cs:28:31:28:34 | null | non-null |
|
||||
| A.cs:38:15:38:26 | access to local variable methodAccess | null | A.cs:28:31:28:34 | null | null |
|
||||
| A.cs:39:27:39:36 | access to local variable methodCall | non-null | A.cs:29:29:29:32 | null | non-null |
|
||||
| A.cs:39:27:39:36 | access to local variable methodCall | null | A.cs:29:29:29:32 | null | null |
|
||||
| A.cs:49:25:49:30 | access to local variable varRef | non-null | A.cs:48:25:48:28 | null | non-null |
|
||||
| A.cs:49:25:49:30 | access to local variable varRef | null | A.cs:48:25:48:28 | null | null |
|
||||
| A.cs:50:9:50:14 | access to local variable varRef | non-null | A.cs:48:25:48:28 | null | non-null |
|
||||
| A.cs:50:9:50:14 | access to local variable varRef | null | A.cs:48:25:48:28 | null | null |
|
||||
| A.cs:53:25:53:30 | access to local variable varRef | non-null | A.cs:52:18:52:21 | null | non-null |
|
||||
| A.cs:53:25:53:30 | access to local variable varRef | null | A.cs:52:18:52:21 | null | null |
|
||||
| A.cs:63:9:63:11 | access to local variable fun | non-null | A.cs:61:26:61:45 | (...) => ... | non-null |
|
||||
| A.cs:63:9:63:11 | access to local variable fun | null | A.cs:61:26:61:45 | (...) => ... | 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:10:22:10:22 | access to local variable s | null |
|
||||
| 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 |
|
||||
| Assert.cs:14:23:14:23 | access to local variable s | non-null | Assert.cs:13:13:13:25 | ... ? ... : ... | non-null |
|
||||
| Assert.cs:14:23:14:23 | access to local variable s | null | Assert.cs:13:13:13:25 | ... ? ... : ... | null |
|
||||
| Assert.cs:15:27:15:27 | access to local variable s | non-null | Assert.cs:13:13:13:25 | ... ? ... : ... | non-null |
|
||||
| Assert.cs:15:27:15:27 | access to local variable s | null | Assert.cs:13:13:13:25 | ... ? ... : ... | null |
|
||||
| Assert.cs:18:26:18:26 | access to local variable s | non-null | Assert.cs:17:13:17:25 | ... ? ... : ... | non-null |
|
||||
| Assert.cs:18:26:18:26 | access to local variable s | null | Assert.cs:17:13:17:25 | ... ? ... : ... | null |
|
||||
| Assert.cs:19:27:19:27 | access to local variable s | non-null | Assert.cs:17:13:17:25 | ... ? ... : ... | non-null |
|
||||
| Assert.cs:19:27:19:27 | access to local variable s | null | Assert.cs:17:13:17: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:22:23:22:23 | access to local variable s | non-null |
|
||||
| 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 |
|
||||
| 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:26:23:26:23 | access to local variable s | null |
|
||||
| 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 |
|
||||
| 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:30:24:30:24 | access to local variable s | null |
|
||||
| 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 |
|
||||
| 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:34:24:34:24 | access to local variable s | non-null |
|
||||
| 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 |
|
||||
| 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:38:23:38:23 | access to local variable s | null |
|
||||
| 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 |
|
||||
| Assert.cs:39:27:39:27 | access to local variable s | non-null | Assert.cs:37:13:37:25 | ... ? ... : ... | non-null |
|
||||
| Assert.cs:39:27:39:27 | access to local variable s | null | Assert.cs:37:13:37: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:42:24:42:24 | access to local variable s | non-null |
|
||||
| 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 |
|
||||
| Assert.cs:43:27:43:27 | access to local variable s | non-null | Assert.cs:41:13:41:25 | ... ? ... : ... | non-null |
|
||||
| Assert.cs:43:27:43:27 | access to local variable s | null | Assert.cs:41:13:41: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:46:23:46:23 | access to local variable s | non-null |
|
||||
| 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 |
|
||||
| Assert.cs:47:27:47:27 | access to local variable s | non-null | Assert.cs:45:13:45:25 | ... ? ... : ... | non-null |
|
||||
| Assert.cs:47:27:47:27 | access to local variable s | null | Assert.cs:45:13:45: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:50:24:50:24 | access to local variable s | null |
|
||||
| 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 |
|
||||
| Assert.cs:51:27:51:27 | access to local variable s | non-null | Assert.cs:49:13:49:25 | ... ? ... : ... | non-null |
|
||||
| Assert.cs:51:27:51:27 | access to local variable s | null | Assert.cs:49:13:49:25 | ... ? ... : ... | null |
|
||||
| B.cs:12:13:12:24 | access to local variable eqCallAlways | non-null | B.cs:7:26:7:29 | null | non-null |
|
||||
| B.cs:12:13:12:24 | access to local variable eqCallAlways | null | B.cs:7:26:7:29 | null | null |
|
||||
| B.cs:12:13:12:32 | call to operator == | false | B.cs:12:13:12:24 | access to local variable eqCallAlways | non-null |
|
||||
| B.cs:12:13:12:32 | call to operator == | true | B.cs:12:13:12:24 | access to local variable eqCallAlways | null |
|
||||
| B.cs:13:13:13:24 | access to local variable eqCallAlways | non-null | B.cs:7:26:7:29 | null | non-null |
|
||||
| B.cs:13:13:13:24 | access to local variable eqCallAlways | null | B.cs:7:26:7:29 | null | null |
|
||||
| B.cs:15:13:15:14 | access to local variable b2 | non-null | B.cs:8:16:8:19 | null | non-null |
|
||||
| B.cs:15:13:15:14 | access to local variable b2 | null | B.cs:8:16:8:19 | null | null |
|
||||
| B.cs:15:13:15:22 | call to operator != | false | B.cs:15:13:15:14 | access to local variable b2 | null |
|
||||
| B.cs:15:13:15:22 | call to operator != | true | B.cs:15:13:15:14 | access to local variable b2 | non-null |
|
||||
| B.cs:16:13:16:14 | access to local variable b2 | non-null | B.cs:8:16:8:19 | null | non-null |
|
||||
| B.cs:16:13:16:14 | access to local variable b2 | null | B.cs:8:16:8:19 | null | null |
|
||||
| B.cs:18:13:18:14 | access to local variable b3 | non-null | B.cs:9:16:9:19 | null | non-null |
|
||||
| B.cs:18:13:18:14 | access to local variable b3 | null | B.cs:9:16:9:19 | null | null |
|
||||
| B.cs:18:13:18:22 | call to operator == | false | B.cs:18:13:18:14 | access to local variable b3 | non-null |
|
||||
| B.cs:18:13:18:22 | call to operator == | true | B.cs:18:13:18:14 | access to local variable b3 | null |
|
||||
| B.cs:20:13:20:14 | access to local variable b3 | non-null | B.cs:9:16:9:19 | null | non-null |
|
||||
| B.cs:20:13:20:14 | access to local variable b3 | null | B.cs:9:16:9:19 | null | null |
|
||||
| B.cs:22:13:22:25 | access to local variable neqCallAlways | non-null | B.cs:10:27:10:30 | null | non-null |
|
||||
| B.cs:22:13:22:25 | access to local variable neqCallAlways | null | B.cs:10:27:10:30 | null | null |
|
||||
| B.cs:22:13:22:33 | call to operator != | false | B.cs:22:13:22:25 | access to local variable neqCallAlways | null |
|
||||
| B.cs:22:13:22:33 | call to operator != | true | B.cs:22:13:22:25 | access to local variable neqCallAlways | non-null |
|
||||
| B.cs:24:13:24:25 | access to local variable neqCallAlways | non-null | B.cs:10:27:10:30 | null | non-null |
|
||||
| B.cs:24:13:24:25 | access to local variable neqCallAlways | null | B.cs:10:27:10:30 | null | null |
|
||||
| B.cs:34:16:34:26 | !... | false | B.cs:34:18:34:25 | call to operator == | true |
|
||||
| B.cs:34:16:34:26 | !... | true | B.cs:34:18:34:25 | call to operator == | false |
|
||||
| B.cs:53:17:53:33 | ... != ... | false | B.cs:53:17:53:25 | (...) ... | null |
|
||||
| B.cs:53:17:53:33 | ... != ... | true | B.cs:53:17:53:25 | (...) ... | non-null |
|
||||
| B.cs:53:25:53:25 | access to local variable o | non-null | B.cs:52:24:52:27 | null | non-null |
|
||||
| B.cs:53:25:53:25 | access to local variable o | null | B.cs:52:24:52:27 | null | null |
|
||||
| B.cs:55:26:55:26 | access to local variable o | non-null | B.cs:52:24:52:27 | null | non-null |
|
||||
| B.cs:55:26:55:26 | access to local variable o | null | B.cs:52:24:52:27 | null | null |
|
||||
| B.cs:55:35:55:35 | access to local variable o | non-null | B.cs:52:24:52:27 | null | non-null |
|
||||
| B.cs:55:35:55:35 | access to local variable o | null | B.cs:52:24:52:27 | null | null |
|
||||
| C.cs:11:13:11:30 | !... | false | C.cs:11:15:11:29 | !... | true |
|
||||
| C.cs:11:13:11:30 | !... | true | C.cs:11:15:11:29 | !... | false |
|
||||
| C.cs:11:15:11:29 | !... | false | C.cs:11:17:11:28 | !... | true |
|
||||
| C.cs:11:15:11:29 | !... | true | C.cs:11:17:11:28 | !... | false |
|
||||
| C.cs:11:17:11:28 | !... | false | C.cs:11:19:11:27 | ... == ... | true |
|
||||
| C.cs:11:17:11:28 | !... | true | C.cs:11:19:11:27 | ... == ... | false |
|
||||
| C.cs:11:19:11:19 | access to local variable o | non-null | C.cs:10:20:10:23 | null | non-null |
|
||||
| C.cs:11:19:11:19 | access to local variable o | null | C.cs:10:20:10:23 | null | null |
|
||||
| C.cs:11:19:11:27 | ... == ... | false | C.cs:11:19:11:19 | access to local variable o | non-null |
|
||||
| C.cs:11:19:11:27 | ... == ... | true | C.cs:11:19:11:19 | access to local variable o | null |
|
||||
| C.cs:13:13:13:13 | access to local variable o | non-null | C.cs:10:20:10:23 | null | non-null |
|
||||
| C.cs:13:13:13:13 | access to local variable o | null | C.cs:10:20:10:23 | null | null |
|
||||
| C.cs:16:13:16:24 | !... | false | C.cs:16:15:16:23 | ... != ... | true |
|
||||
| C.cs:16:13:16:24 | !... | true | C.cs:16:15:16:23 | ... != ... | false |
|
||||
| C.cs:16:15:16:15 | access to local variable o | non-null | C.cs:10:20:10:23 | null | non-null |
|
||||
| C.cs:16:15:16:15 | access to local variable o | null | C.cs:10:20:10:23 | null | null |
|
||||
| C.cs:16:15:16:23 | ... != ... | false | C.cs:16:15:16:15 | access to local variable o | null |
|
||||
| C.cs:16:15:16:23 | ... != ... | true | C.cs:16:15:16:15 | access to local variable o | non-null |
|
||||
| C.cs:18:13:18:13 | access to local variable o | non-null | C.cs:10:20:10:23 | null | non-null |
|
||||
| C.cs:18:13:18:13 | access to local variable o | null | C.cs:10:20:10:23 | null | null |
|
||||
| C.cs:24:13:24:21 | ... != ... | false | C.cs:24:13:24:13 | access to parameter o | null |
|
||||
| C.cs:24:13:24:21 | ... != ... | true | C.cs:24:13:24:13 | access to parameter o | non-null |
|
||||
| C.cs:28:37:28:45 | ... == ... | false | C.cs:28:37:28:37 | access to parameter o | non-null |
|
||||
| C.cs:28:37:28:45 | ... == ... | true | C.cs:28:37:28:37 | access to parameter o | null |
|
||||
| C.cs:30:40:30:48 | ... != ... | false | C.cs:30:40:30:40 | access to parameter o | null |
|
||||
| C.cs:30:40:30:48 | ... != ... | true | C.cs:30:40:30:40 | access to parameter o | non-null |
|
||||
| C.cs:34:13:34:21 | ... == ... | false | C.cs:34:13:34:13 | access to parameter o | non-null |
|
||||
| C.cs:34:13:34:21 | ... == ... | true | C.cs:34:13:34:13 | access to parameter o | 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:41:22:41:22 | access to local variable s | non-null |
|
||||
| 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 |
|
||||
| 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:45:22:45:22 | access to local variable s | null |
|
||||
| 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 |
|
||||
| C.cs:52:20:52:21 | access to local variable o1 | non-null | C.cs:51:18:51:29 | object creation of type Object | non-null |
|
||||
| C.cs:52:20:52:21 | access to local variable o1 | null | C.cs:51:18:51:29 | object creation of type Object | null |
|
||||
| C.cs:53:9:53:10 | access to local variable o1 | non-null | C.cs:51:18:51:29 | object creation of type Object | non-null |
|
||||
| C.cs:53:9:53:10 | access to local variable o1 | null | C.cs:51:18:51:29 | object creation of type Object | null |
|
||||
| C.cs:56:23:56:24 | access to local variable o2 | non-null | C.cs:55:18:55:36 | ... ? ... : ... | non-null |
|
||||
| C.cs:56:23:56:24 | access to local variable o2 | null | C.cs:55:18:55:36 | ... ? ... : ... | null |
|
||||
| C.cs:57:9:57:10 | access to local variable o2 | non-null | C.cs:55:18:55:36 | ... ? ... : ... | non-null |
|
||||
| C.cs:57:9:57:10 | access to local variable o2 | null | C.cs:55:18:55:36 | ... ? ... : ... | null |
|
||||
| C.cs:63:23:63:24 | access to local variable o1 | non-null | C.cs:62:18:62:46 | ... ? ... : ... | non-null |
|
||||
| C.cs:63:23:63:24 | access to local variable o1 | null | C.cs:62:18:62:46 | ... ? ... : ... | null |
|
||||
| C.cs:64:9:64:10 | access to local variable o1 | non-null | C.cs:62:18:62:46 | ... ? ... : ... | non-null |
|
||||
| C.cs:64:9:64:10 | access to local variable o1 | null | C.cs:62:18:62:46 | ... ? ... : ... | null |
|
||||
| C.cs:67:23:67:24 | access to local variable o1 | non-null | C.cs:62:18:62:46 | ... ? ... : ... | non-null |
|
||||
| C.cs:67:23:67:24 | access to local variable o1 | null | C.cs:62:18:62:46 | ... ? ... : ... | null |
|
||||
| C.cs:68:9:68:10 | access to local variable o2 | non-null | C.cs:66:18:66:46 | ... ? ... : ... | non-null |
|
||||
| C.cs:68:9:68:10 | access to local variable o2 | null | C.cs:66:18:66:46 | ... ? ... : ... | null |
|
||||
| C.cs:71:26:71:27 | access to local variable o3 | non-null | C.cs:70:18:70:46 | ... ? ... : ... | non-null |
|
||||
| C.cs:71:26:71:27 | access to local variable o3 | null | C.cs:70:18:70:46 | ... ? ... : ... | null |
|
||||
| C.cs:72:9:72:10 | access to local variable o3 | non-null | C.cs:70:18:70:46 | ... ? ... : ... | non-null |
|
||||
| C.cs:72:9:72:10 | access to local variable o3 | null | C.cs:70:18:70:46 | ... ? ... : ... | null |
|
||||
| C.cs:78:13:78:24 | call to method IsNotNull | false | C.cs:78:23:78:23 | access to local variable o | null |
|
||||
| C.cs:78:13:78:24 | call to method IsNotNull | true | C.cs:78:23:78:23 | access to local variable o | non-null |
|
||||
| C.cs:78:23:78:23 | access to local variable o | non-null | C.cs:77:20:77:23 | null | non-null |
|
||||
| C.cs:78:23:78:23 | access to local variable o | null | C.cs:77:20:77:23 | null | null |
|
||||
| C.cs:79:13:79:13 | access to local variable o | non-null | C.cs:77:20:77:23 | null | non-null |
|
||||
| C.cs:79:13:79:13 | access to local variable o | null | C.cs:77:20:77:23 | null | null |
|
||||
| C.cs:82:13:82:22 | !... | false | C.cs:82:14:82:22 | call to method IsNull | true |
|
||||
| C.cs:82:13:82:22 | !... | true | C.cs:82:14:82:22 | call to method IsNull | false |
|
||||
| C.cs:82:14:82:22 | call to method IsNull | false | C.cs:82:21:82:21 | access to local variable o | non-null |
|
||||
| C.cs:82:14:82:22 | call to method IsNull | true | C.cs:82:21:82:21 | access to local variable o | null |
|
||||
| C.cs:82:21:82:21 | access to local variable o | non-null | C.cs:77:20:77:23 | null | non-null |
|
||||
| C.cs:82:21:82:21 | access to local variable o | null | C.cs:77:20:77:23 | null | null |
|
||||
| C.cs:83:13:83:13 | access to local variable o | non-null | C.cs:77:20:77:23 | null | non-null |
|
||||
| C.cs:83:13:83:13 | access to local variable o | null | C.cs:77:20:77:23 | null | null |
|
||||
| C.cs:89:13:89:13 | access to local variable o | non-null | C.cs:88:20:88:23 | null | non-null |
|
||||
| C.cs:89:13:89:13 | access to local variable o | null | C.cs:88:20:88:23 | null | null |
|
||||
| C.cs:89:13:89:23 | ... is ... | true | C.cs:89:13:89:13 | access to local variable o | non-null |
|
||||
| C.cs:90:13:90:13 | access to local variable o | non-null | C.cs:88:20:88:23 | null | non-null |
|
||||
| C.cs:90:13:90:13 | access to local variable o | null | C.cs:88:20:88:23 | null | null |
|
||||
| C.cs:96:15:96:15 | access to local variable o | non-null | C.cs:95:17:95:45 | ... ? ... : ... | non-null |
|
||||
| C.cs:96:15:96:15 | access to local variable o | null | C.cs:95:17:95:45 | ... ? ... : ... | null |
|
||||
| C.cs:97:13:97:13 | access to local variable o | non-null | C.cs:95:17:95:45 | ... ? ... : ... | non-null |
|
||||
| C.cs:97:13:97:13 | access to local variable o | null | C.cs:95:17:95:45 | ... ? ... : ... | null |
|
||||
| C.cs:114:22:114:28 | access to local variable colours | non-null | C.cs:113:26:113:29 | null | non-null |
|
||||
| C.cs:114:22:114:28 | access to local variable colours | null | C.cs:113:26:113:29 | null | null |
|
||||
| C.cs:114:22:114:36 | ... == ... | false | C.cs:114:22:114:28 | access to local variable colours | non-null |
|
||||
| C.cs:114:22:114:36 | ... == ... | true | C.cs:114:22:114:28 | access to local variable colours | null |
|
||||
| C.cs:114:22:114:59 | ... \|\| ... | false | C.cs:114:22:114:36 | ... == ... | false |
|
||||
| C.cs:114:22:114:59 | ... \|\| ... | false | C.cs:114:41:114:59 | ... == ... | false |
|
||||
| C.cs:114:41:114:47 | access to local variable colours | non-null | C.cs:113:26:113:29 | null | non-null |
|
||||
| C.cs:114:41:114:47 | access to local variable colours | null | C.cs:113:26:113:29 | null | null |
|
||||
| C.cs:114:73:114:79 | access to local variable colours | non-null | C.cs:113:26:113:29 | null | non-null |
|
||||
| C.cs:114:73:114:79 | access to local variable colours | null | C.cs:113:26:113:29 | null | null |
|
||||
| C.cs:121:13:121:20 | access to local variable children | non-null | C.cs:119:29:119:32 | null | non-null |
|
||||
| C.cs:121:13:121:20 | access to local variable children | null | C.cs:119:29:119:32 | null | null |
|
||||
| C.cs:121:13:121:28 | ... == ... | false | C.cs:121:13:121:20 | access to local variable children | non-null |
|
||||
| C.cs:121:13:121:28 | ... == ... | true | C.cs:121:13:121:20 | access to local variable children | null |
|
||||
| C.cs:130:13:130:38 | ... == ... | false | C.cs:130:14:130:29 | ... = ... | non-null |
|
||||
| C.cs:130:13:130:38 | ... == ... | true | C.cs:130:14:130:29 | ... = ... | null |
|
||||
| C.cs:130:13:130:55 | ... \|\| ... | false | C.cs:130:13:130:38 | ... == ... | false |
|
||||
| C.cs:130:13:130:55 | ... \|\| ... | false | C.cs:130:43:130:55 | ... > ... | false |
|
||||
| C.cs:130:43:130:44 | access to local variable ok | non-null | C.cs:130:20:130:28 | ... = ... | non-null |
|
||||
| C.cs:130:43:130:44 | access to local variable ok | null | C.cs:130:20:130:28 | ... = ... | null |
|
||||
| C.cs:138:13:138:48 | ... \|\| ... | false | C.cs:138:13:138:30 | call to local function Foo | false |
|
||||
| C.cs:138:13:138:48 | ... \|\| ... | false | C.cs:138:35:138:48 | ... > ... | false |
|
||||
| C.cs:138:35:138:37 | access to local variable ok2 | non-null | C.cs:138:23:138:29 | "hello" | non-null |
|
||||
| C.cs:138:35:138:37 | access to local variable ok2 | null | C.cs:138:23:138:29 | "hello" | null |
|
||||
| C.cs:146:13:146:39 | ... != ... | false | C.cs:146:14:146:30 | ... = ... | null |
|
||||
| C.cs:146:13:146:39 | ... != ... | true | C.cs:146:14:146:30 | ... = ... | non-null |
|
||||
| C.cs:146:13:146:57 | ... && ... | true | C.cs:146:13:146:39 | ... != ... | true |
|
||||
| C.cs:146:13:146:57 | ... && ... | true | C.cs:146:44:146:57 | ... > ... | true |
|
||||
| C.cs:146:44:146:46 | access to local variable ok3 | non-null | C.cs:146:26:146:29 | null | non-null |
|
||||
| C.cs:146:44:146:46 | access to local variable ok3 | null | C.cs:146:26:146:29 | null | null |
|
||||
| C.cs:158:16:158:16 | access to local variable s | non-null | C.cs:156:17:156:20 | null | non-null |
|
||||
| C.cs:158:16:158:16 | access to local variable s | null | C.cs:156:17:156:20 | null | null |
|
||||
| C.cs:158:16:158:24 | ... != ... | false | C.cs:158:16:158:16 | access to local variable s | null |
|
||||
| C.cs:158:16:158:24 | ... != ... | true | C.cs:158:16:158:16 | access to local variable s | non-null |
|
||||
| C.cs:166:16:166:16 | access to local variable s | non-null | C.cs:164:17:164:20 | null | non-null |
|
||||
| C.cs:166:16:166:16 | access to local variable s | null | C.cs:164:17:164:20 | null | null |
|
||||
| C.cs:166:16:166:24 | ... != ... | false | C.cs:166:16:166:16 | access to local variable s | null |
|
||||
| C.cs:166:16:166:24 | ... != ... | true | C.cs:166:16:166:16 | access to local variable s | non-null |
|
||||
| C.cs:171:13:171:13 | access to local variable s | non-null | C.cs:168:13:168:16 | null | non-null |
|
||||
| C.cs:171:13:171:13 | access to local variable s | null | C.cs:168:13:168:16 | null | null |
|
||||
| C.cs:173:16:173:16 | access to local variable s | non-null | C.cs:168:13:168:16 | null | non-null |
|
||||
| C.cs:173:16:173:16 | access to local variable s | null | C.cs:168:13:168:16 | null | null |
|
||||
| C.cs:173:16:173:24 | ... != ... | false | C.cs:173:16:173:16 | access to local variable s | null |
|
||||
| C.cs:173:16:173:24 | ... != ... | true | C.cs:173:16:173:16 | access to local variable s | non-null |
|
||||
| C.cs:187:16:187:24 | ... != ... | false | C.cs:187:16:187:16 | access to local variable s | null |
|
||||
| C.cs:187:16:187:24 | ... != ... | true | C.cs:187:16:187:16 | access to local variable s | non-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:212:13:212:13 | access to local variable s | null |
|
||||
| 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 |
|
||||
| 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:222:13:222:13 | access to local variable s | non-null | C.cs:221:13:221:14 | "" | non-null |
|
||||
| C.cs:222:13:222:13 | access to local variable s | null | C.cs:221:13:221:14 | "" | null |
|
||||
| C.cs:222:13:222:21 | ... != ... | false | C.cs:222:13:222:13 | access to local variable s | null |
|
||||
| C.cs:222:13:222:21 | ... != ... | true | C.cs:222:13:222:13 | access to local variable s | non-null |
|
||||
| C.cs:222:13:222:42 | ... && ... | true | C.cs:222:13:222:21 | ... != ... | true |
|
||||
| C.cs:222:13:222:42 | ... && ... | true | C.cs:222:26:222:42 | ... == ... | true |
|
||||
| C.cs:222:26:222:26 | access to local variable s | non-null | C.cs:221:13:221:14 | "" | non-null |
|
||||
| C.cs:222:26:222:26 | access to local variable s | null | C.cs:221:13:221:14 | "" | null |
|
||||
| C.cs:230:22:230:30 | ... != ... | false | C.cs:230:22:230:22 | access to local variable s | null |
|
||||
| C.cs:230:22:230:30 | ... != ... | true | C.cs:230:22:230:22 | access to local variable s | non-null |
|
||||
| C.cs:236:24:236:32 | ... == ... | false | C.cs:236:24:236:24 | access to local variable s | non-null |
|
||||
| C.cs:236:24:236:32 | ... == ... | true | C.cs:236:24:236:24 | access to local variable s | null |
|
||||
| C.cs:250:9:250:9 | access to local variable a | non-null | C.cs:249:19:249:22 | null | non-null |
|
||||
| C.cs:250:9:250:9 | access to local variable a | null | C.cs:249:19:249:22 | null | null |
|
||||
| C.cs:253:9:253:9 | access to local variable a | non-null | C.cs:252:13:252:23 | array creation of type Int32[] | non-null |
|
||||
| C.cs:253:9:253:9 | access to local variable a | null | C.cs:252:13:252:23 | array creation of type Int32[] | null |
|
||||
| C.cs:261:9:261:10 | access to local variable ia | non-null | C.cs:258:20:258:23 | null | non-null |
|
||||
| C.cs:261:9:261:10 | access to local variable ia | null | C.cs:258:20:258:23 | null | null |
|
||||
| C.cs:262:20:262:21 | access to local variable sa | non-null | C.cs:259:23:259:26 | null | non-null |
|
||||
| C.cs:262:20:262:21 | access to local variable sa | null | C.cs:259:23:259:26 | null | null |
|
||||
| C.cs:264:9:264:10 | access to local variable ia | non-null | C.cs:258:20:258:23 | null | non-null |
|
||||
| C.cs:264:9:264:10 | access to local variable ia | null | C.cs:258:20:258:23 | null | null |
|
||||
| C.cs:265:16:265:17 | access to local variable sa | non-null | C.cs:259:23:259:26 | null | non-null |
|
||||
| C.cs:265:16:265:17 | access to local variable sa | null | C.cs:259:23:259:26 | null | null |
|
||||
| D.cs:28:13:28:25 | ... != ... | false | D.cs:28:13:28:17 | access to parameter param | null |
|
||||
| D.cs:28:13:28:25 | ... != ... | true | D.cs:28:13:28:17 | access to parameter param | non-null |
|
||||
| D.cs:37:13:37:23 | ... is ... | true | D.cs:37:13:37:13 | access to parameter x | non-null |
|
||||
| D.cs:38:13:38:21 | ... == ... | false | D.cs:38:13:38:13 | access to parameter x | non-null |
|
||||
| D.cs:38:13:38:21 | ... == ... | true | D.cs:38:13:38:13 | access to parameter x | null |
|
||||
| D.cs:39:16:39:24 | ... == ... | false | D.cs:39:16:39:16 | access to parameter x | non-null |
|
||||
| D.cs:39:16:39:24 | ... == ... | true | D.cs:39:16:39:16 | access to parameter x | 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:45:13:45:14 | access to local variable o1 | null |
|
||||
| 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 |
|
||||
| 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 ... | 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 |
|
||||
| D.cs:51:13:51:44 | ... != ... | false | D.cs:51:14:51:35 | ... = ... | null |
|
||||
| D.cs:51:13:51:44 | ... != ... | true | D.cs:51:14:51:35 | ... = ... | non-null |
|
||||
| D.cs:52:13:52:14 | access to local variable o3 | non-null | D.cs:51:19:51:35 | ... ? ... : ... | non-null |
|
||||
| D.cs:52:13:52:14 | access to local variable o3 | null | D.cs:51:19:51:35 | ... ? ... : ... | null |
|
||||
| D.cs:55:13:55:42 | ... != ... | false | D.cs:55:14:55:32 | ... && ... | false |
|
||||
| D.cs:55:13:55:42 | ... != ... | true | D.cs:55:14:55:32 | ... && ... | true |
|
||||
| D.cs:55:14:55:32 | ... && ... | true | D.cs:55:14:55:18 | ... > ... | true |
|
||||
| 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:55:23:55:24 | access to local variable o4 | null |
|
||||
| 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 |
|
||||
| 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:58:19:58:20 | access to local variable o4 | null |
|
||||
| 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:59:13:59:14 | access to local variable o5 | null |
|
||||
| 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:61:13:61:14 | access to local variable o4 | null |
|
||||
| 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 |
|
||||
| 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:65:27:65:28 | access to local variable o6 | non-null |
|
||||
| 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 |
|
||||
| D.cs:66:13:66:14 | access to local variable o6 | non-null | D.cs:64:18:64:34 | ... ? ... : ... | non-null |
|
||||
| D.cs:66:13:66:14 | access to local variable o6 | null | D.cs:64:18:64:34 | ... ? ... : ... | null |
|
||||
| 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:69:18:69:19 | access to local variable o7 | null |
|
||||
| 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 |
|
||||
| D.cs:70:13:70:14 | access to local variable ok | false | D.cs:69:18:69:36 | ... && ... | false |
|
||||
| D.cs:70:13:70:14 | access to local variable ok | true | D.cs:69:18:69:36 | ... && ... | true |
|
||||
| D.cs:71:13:71:14 | access to local variable o7 | non-null | D.cs:68:18:68:34 | ... ? ... : ... | non-null |
|
||||
| D.cs:71:13:71:14 | access to local variable o7 | null | D.cs:68:18:68:34 | ... ? ... : ... | null |
|
||||
| D.cs:73:13:73:14 | access to local variable o7 | non-null | D.cs:68:18:68:34 | ... ? ... : ... | non-null |
|
||||
| D.cs:73:13:73:14 | access to local variable o7 | null | D.cs:68:18:68:34 | ... ? ... : ... | 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:76:21:76:22 | access to local variable o8 | non-null |
|
||||
| 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 |
|
||||
| D.cs:80:13:80:14 | access to local variable o8 | non-null | D.cs:75:18:75:34 | ... ? ... : ... | non-null |
|
||||
| D.cs:80:13:80:14 | access to local variable o8 | null | D.cs:75:18:75:34 | ... ? ... : ... | null |
|
||||
| D.cs:82:13:82:14 | access to local variable o8 | non-null | D.cs:75:18:75:34 | ... ? ... : ... | non-null |
|
||||
| D.cs:82:13:82:14 | access to local variable o8 | null | D.cs:75:18:75:34 | ... ? ... : ... | null |
|
||||
| D.cs:84:13:84:14 | access to local variable o8 | non-null | D.cs:75:18:75:34 | ... ? ... : ... | non-null |
|
||||
| D.cs:84:13:84:14 | access to local variable o8 | null | D.cs:75:18:75:34 | ... ? ... : ... | null |
|
||||
| D.cs:91:13:91:14 | access to local variable xs | non-null | D.cs:89:20:89:44 | ... ? ... : ... | non-null |
|
||||
| D.cs:91:13:91:14 | access to local variable xs | null | D.cs:89:20:89:44 | ... ? ... : ... | null |
|
||||
| D.cs:94:21:94:22 | access to local variable xs | non-null | D.cs:89:20:89:44 | ... ? ... : ... | non-null |
|
||||
| D.cs:94:21:94:22 | access to local variable xs | null | D.cs:89:20:89:44 | ... ? ... : ... | null |
|
||||
| D.cs:98:21:98:22 | access to local variable xs | non-null | D.cs:89:20:89:44 | ... ? ... : ... | non-null |
|
||||
| D.cs:98:21:98:22 | access to local variable xs | null | D.cs:89:20:89:44 | ... ? ... : ... | null |
|
||||
| D.cs:102:31:102:32 | access to local variable xs | empty | D.cs:89:20:89:44 | ... ? ... : ... | empty |
|
||||
| D.cs:102:31:102:32 | access to local variable xs | non-empty | D.cs:89:20:89:44 | ... ? ... : ... | non-empty |
|
||||
| D.cs:102:31:102:32 | access to local variable xs | non-null | D.cs:89:20:89:44 | ... ? ... : ... | non-null |
|
||||
| D.cs:102:31:102:32 | access to local variable xs | null | D.cs:89:20:89:44 | ... ? ... : ... | null |
|
||||
| D.cs:105:19:105:20 | access to local variable xs | non-null | D.cs:89:20:89:44 | ... ? ... : ... | non-null |
|
||||
| D.cs:105:19:105:20 | access to local variable xs | null | D.cs:89:20:89:44 | ... ? ... : ... | null |
|
||||
| D.cs:106:17:106:18 | access to local variable xs | non-null | D.cs:89:20:89:44 | ... ? ... : ... | non-null |
|
||||
| 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:110:26:110:27 | access to local variable xs | null |
|
||||
| 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 |
|
||||
| D.cs:111:21:111:22 | access to local variable xs | non-null | D.cs:89:20:89:44 | ... ? ... : ... | non-null |
|
||||
| D.cs:111:21:111:22 | access to local variable xs | null | D.cs:89:20:89:44 | ... ? ... : ... | 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:118:13:118:13 | access to local variable x | non-null |
|
||||
| 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: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 |
|
||||
| D.cs:122:13:122:13 | access to local variable x | non-null | D.cs:118:13:118:30 | ... ? ... : ... | non-null |
|
||||
| D.cs:122:13:122:13 | access to local variable x | null | D.cs:118:13:118:30 | ... ? ... : ... | null |
|
||||
| D.cs:127:20:127:28 | ... == ... | false | D.cs:127:20:127:20 | access to parameter a | non-null |
|
||||
| D.cs:127:20:127:28 | ... == ... | true | D.cs:127:20:127:20 | access to parameter a | null |
|
||||
| D.cs:128:20:128:28 | ... == ... | false | D.cs:128:20:128:20 | access to parameter b | non-null |
|
||||
| D.cs:128:20:128:28 | ... == ... | true | D.cs:128:20:128:20 | access to parameter b | null |
|
||||
| D.cs:139:13:139:21 | ... != ... | false | D.cs:139:13:139:13 | access to parameter a | null |
|
||||
| D.cs:139:13:139:21 | ... != ... | true | D.cs:139:13:139:13 | access to parameter a | non-null |
|
||||
| D.cs:152:17:152:27 | ... != ... | false | D.cs:152:17:152:19 | access to parameter obj | null |
|
||||
| D.cs:152:17:152:27 | ... != ... | true | D.cs:152:17:152:19 | access to parameter obj | non-null |
|
||||
| D.cs:182:9:182:12 | access to local variable obj2 | non-null | D.cs:176:20:176:28 | call to method MkMaybe | non-null |
|
||||
| D.cs:182:9:182:12 | access to local variable obj2 | null | D.cs:176:20:176:28 | call to method MkMaybe | null |
|
||||
| D.cs:196:13:196:13 | access to local variable o | non-null | D.cs:195:17:195:28 | object creation of type Object | non-null |
|
||||
| D.cs:196:13:196:13 | access to local variable o | null | D.cs:195:17:195:28 | object creation of type Object | null |
|
||||
| D.cs:196:13:196:21 | ... == ... | false | D.cs:196:13:196:13 | access to local variable o | non-null |
|
||||
| D.cs:196:13:196:21 | ... == ... | true | D.cs:196:13:196:13 | access to local variable o | null |
|
||||
| D.cs:197:13:197:13 | access to local variable o | non-null | D.cs:195:17:195:28 | object creation of type Object | non-null |
|
||||
| D.cs:197:13:197:13 | access to local variable o | null | D.cs:195:17:195:28 | object creation of type Object | null |
|
||||
| D.cs:198:9:198:9 | access to local variable o | non-null | D.cs:195:17:195:28 | object creation of type Object | non-null |
|
||||
| D.cs:198:9:198:9 | access to local variable o | null | D.cs:195:17:195:28 | object creation of type Object | null |
|
||||
| D.cs:206:17:206:25 | ... == ... | false | D.cs:206:17:206:17 | access to local variable e | non-null |
|
||||
| D.cs:206:17:206:25 | ... == ... | true | D.cs:206:17:206:17 | access to local variable e | null |
|
||||
| D.cs:212:18:212:18 | access to local variable n | non-null | D.cs:211:20:211:23 | null | non-null |
|
||||
| D.cs:212:18:212:18 | access to local variable n | null | D.cs:211:20:211:23 | null | null |
|
||||
| D.cs:212:18:212:26 | ... == ... | false | D.cs:212:18:212:18 | access to local variable n | non-null |
|
||||
| D.cs:212:18:212:26 | ... == ... | true | D.cs:212:18:212:18 | access to local variable n | null |
|
||||
| D.cs:212:45:212:45 | access to local variable n | non-null | D.cs:211:20:211:23 | null | non-null |
|
||||
| D.cs:212:45:212:45 | access to local variable n | null | D.cs:211:20:211:23 | null | null |
|
||||
| D.cs:213:9:213:10 | access to local variable o2 | non-null | D.cs:212:18:212:45 | ... ? ... : ... | non-null |
|
||||
| D.cs:213:9:213:10 | access to local variable o2 | null | D.cs:212:18:212:45 | ... ? ... : ... | null |
|
||||
| D.cs:216:13:216:14 | access to local variable o3 | non-null | D.cs:215:18:215:22 | "abc" | non-null |
|
||||
| D.cs:216:13:216:14 | access to local variable o3 | null | D.cs:215:18:215:22 | "abc" | null |
|
||||
| D.cs:216:13:216:22 | ... == ... | false | D.cs:216:13:216:14 | access to local variable o3 | non-null |
|
||||
| D.cs:216:13:216:22 | ... == ... | true | D.cs:216:13:216:14 | access to local variable o3 | null |
|
||||
| D.cs:217:13:217:14 | access to local variable o3 | non-null | D.cs:215:18:215:22 | "abc" | non-null |
|
||||
| D.cs:217:13:217:14 | access to local variable o3 | null | D.cs:215:18:215:22 | "abc" | null |
|
||||
| D.cs:218:9:218:10 | access to local variable o3 | non-null | D.cs:215:18:215:22 | "abc" | non-null |
|
||||
| D.cs:218:9:218:10 | access to local variable o3 | null | D.cs:215:18:215:22 | "abc" | null |
|
||||
| D.cs:220:18:220:26 | ... + ... | non-null | D.cs:220:23:220:26 | null | non-null |
|
||||
| D.cs:220:18:220:26 | ... + ... | null | D.cs:220:23:220:26 | null | null |
|
||||
| D.cs:221:13:221:14 | access to local variable o4 | non-null | D.cs:220:18:220:26 | ... + ... | non-null |
|
||||
| D.cs:221:13:221:14 | access to local variable o4 | null | D.cs:220:18:220:26 | ... + ... | null |
|
||||
| D.cs:221:13:221:22 | ... == ... | false | D.cs:221:13:221:14 | access to local variable o4 | non-null |
|
||||
| D.cs:221:13:221:22 | ... == ... | true | D.cs:221:13:221:14 | access to local variable o4 | null |
|
||||
| D.cs:222:13:222:14 | access to local variable o4 | non-null | D.cs:220:18:220:26 | ... + ... | non-null |
|
||||
| D.cs:222:13:222:14 | access to local variable o4 | null | D.cs:220:18:220:26 | ... + ... | null |
|
||||
| D.cs:223:9:223:10 | access to local variable o4 | non-null | D.cs:220:18:220:26 | ... + ... | non-null |
|
||||
| D.cs:223:9:223:10 | access to local variable o4 | null | D.cs:220:18:220:26 | ... + ... | 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:242:13:242:17 | access to local variable other | non-null |
|
||||
| D.cs:242:13:242:25 | ... == ... | true | D.cs:242:13:242:17 | access to local variable other | 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:244:13:244:17 | access to local variable other | null |
|
||||
| D.cs:244:13:244:25 | ... != ... | true | D.cs:244:13:244:17 | access to local variable other | non-null |
|
||||
| D.cs:253:13:253:14 | access to local variable o2 | non-null | D.cs:249:18:249:38 | ... ? ... : ... | non-null |
|
||||
| D.cs:253:13:253:14 | access to local variable o2 | null | D.cs:249:18:249:38 | ... ? ... : ... | null |
|
||||
| D.cs:266:13:266:27 | ... is ... | true | D.cs:266:13:266:17 | access to local variable other | non-null |
|
||||
| D.cs:310:21:310:26 | ... + ... | non-null | D.cs:310:26:310:26 | access to parameter a | non-null |
|
||||
| D.cs:310:21:310:26 | ... + ... | null | D.cs:310:26:310:26 | access to parameter a | null |
|
||||
| D.cs:312:17:312:23 | !... | false | D.cs:312:18:312:23 | access to local variable s_null | true |
|
||||
| D.cs:312:17:312:23 | !... | true | D.cs:312:18:312:23 | access to local variable s_null | false |
|
||||
| D.cs:318:16:318:62 | ... && ... | true | D.cs:318:16:318:36 | ... == ... | true |
|
||||
| D.cs:318:16:318:62 | ... && ... | true | D.cs:318:41:318:62 | ... != ... | true |
|
||||
| D.cs:336:13:336:23 | ... == ... | false | D.cs:336:13:336:15 | access to parameter obj | non-null |
|
||||
| D.cs:336:13:336:23 | ... == ... | true | D.cs:336:13:336:15 | access to parameter obj | null |
|
||||
| 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 |
|
||||
| D.cs:343:13:343:27 | ... + ... | null | D.cs:343:13:343:15 | access to local variable msg | null |
|
||||
| D.cs:344:33:344:35 | access to local variable msg | non-null | D.cs:343:13:343:27 | ... + ... | non-null |
|
||||
| D.cs:344:33:344:35 | access to local variable msg | null | D.cs:343:13:343:27 | ... + ... | null |
|
||||
| D.cs:367:13:367:56 | ... && ... | true | D.cs:367:13:367:21 | ... > ... | true |
|
||||
| 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:367:27:367:27 | access to local variable b | non-null |
|
||||
| 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 |
|
||||
| D.cs:367:40:367:40 | access to local variable b | non-null | D.cs:366:19:366:47 | ... ? ... : ... | non-null |
|
||||
| D.cs:367:40:367:40 | access to local variable b | null | D.cs:366:19:366:47 | ... ? ... : ... | null |
|
||||
| D.cs:372:13:372:13 | access to local variable b | non-null | D.cs:366:19:366:47 | ... ? ... : ... | non-null |
|
||||
| D.cs:372:13:372:13 | access to local variable b | null | D.cs:366:19:366:47 | ... ? ... : ... | null |
|
||||
| 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:390:20:390:28 | ... == ... | false | D.cs:390:20:390:20 | access to parameter a | non-null |
|
||||
| D.cs:390:20:390:28 | ... == ... | true | D.cs:390:20:390:20 | access to parameter a | null |
|
||||
| D.cs:397:20:397:28 | ... == ... | false | D.cs:397:20:397:20 | access to parameter b | non-null |
|
||||
| D.cs:397:20:397:28 | ... == ... | true | D.cs:397:20:397:20 | access to parameter b | null |
|
||||
| D.cs:407:13:407:64 | ... \|\| ... | false | D.cs:407:14:407:35 | ... && ... | false |
|
||||
| D.cs:407:13:407:64 | ... \|\| ... | false | D.cs:407:42:407:63 | ... && ... | false |
|
||||
| D.cs:407:14:407:22 | ... != ... | false | D.cs:407:14:407:14 | access to parameter x | null |
|
||||
| D.cs:407:14:407:22 | ... != ... | true | D.cs:407:14:407:14 | access to parameter x | non-null |
|
||||
| D.cs:407:14:407:35 | ... && ... | true | D.cs:407:14:407:22 | ... != ... | true |
|
||||
| D.cs:407:14:407:35 | ... && ... | true | D.cs:407:27:407:35 | ... == ... | true |
|
||||
| D.cs:407:27:407:35 | ... == ... | false | D.cs:407:27:407:27 | access to parameter y | non-null |
|
||||
| D.cs:407:27:407:35 | ... == ... | true | D.cs:407:27:407:27 | access to parameter y | null |
|
||||
| D.cs:407:42:407:50 | ... == ... | false | D.cs:407:42:407:42 | access to parameter x | non-null |
|
||||
| D.cs:407:42:407:50 | ... == ... | true | D.cs:407:42:407:42 | access to parameter x | null |
|
||||
| D.cs:407:42:407:63 | ... && ... | true | D.cs:407:42:407:50 | ... == ... | true |
|
||||
| D.cs:407:42:407:63 | ... && ... | true | D.cs:407:55:407:63 | ... != ... | true |
|
||||
| D.cs:407:55:407:63 | ... != ... | false | D.cs:407:55:407:55 | access to parameter y | null |
|
||||
| D.cs:407:55:407:63 | ... != ... | true | D.cs:407:55:407:55 | access to parameter y | non-null |
|
||||
| D.cs:409:13:409:21 | ... != ... | false | D.cs:409:13:409:13 | access to parameter x | null |
|
||||
| D.cs:409:13:409:21 | ... != ... | true | D.cs:409:13:409:13 | access to parameter x | non-null |
|
||||
| D.cs:411:13:411:21 | ... != ... | false | D.cs:411:13:411:13 | access to parameter y | null |
|
||||
| D.cs:411:13:411:21 | ... != ... | true | D.cs:411:13:411:13 | access to parameter y | non-null |
|
||||
| E.cs:10:22:10:54 | ... && ... | true | E.cs:10:22:10:29 | ... < ... | true |
|
||||
| E.cs:10:22:10:54 | ... && ... | true | E.cs:10:34:10:54 | ... != ... | true |
|
||||
| E.cs:10:34:10:54 | ... != ... | false | E.cs:10:35:10:45 | ... = ... | null |
|
||||
| E.cs:10:34:10:54 | ... != ... | true | E.cs:10:35:10:45 | ... = ... | non-null |
|
||||
| E.cs:12:22:12:27 | access to local variable haveA2 | false | E.cs:10:22:10:54 | ... && ... | false |
|
||||
| E.cs:12:22:12:27 | access to local variable haveA2 | true | E.cs:10:22:10:54 | ... && ... | true |
|
||||
| E.cs:12:22:12:52 | ... && ... | true | E.cs:12:22:12:27 | access to local variable haveA2 | true |
|
||||
| E.cs:12:22:12:52 | ... && ... | true | E.cs:12:32:12:52 | ... != ... | true |
|
||||
| E.cs:12:32:12:52 | ... != ... | false | E.cs:12:33:12:43 | ... = ... | null |
|
||||
| E.cs:12:32:12:52 | ... != ... | true | E.cs:12:33:12:43 | ... = ... | non-null |
|
||||
| E.cs:13:13:13:18 | access to local variable haveA3 | false | E.cs:12:22:12:52 | ... && ... | false |
|
||||
| E.cs:13:13:13:18 | access to local variable haveA3 | true | E.cs:12:22:12:52 | ... && ... | true |
|
||||
| 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:20:19:20:20 | access to local variable s1 | non-null |
|
||||
| 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:21:13:21:14 | access to local variable s2 | non-null |
|
||||
| E.cs:21:13:21:22 | ... == ... | true | E.cs:21:13:21:14 | access to local variable s2 | 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:24:19:24:20 | access to local variable s1 | non-null |
|
||||
| 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 |
|
||||
| E.cs:53:16:53:19 | access to local variable iter | non-null | E.cs:52:20:52:39 | call to method GetEnumerator | non-null |
|
||||
| E.cs:53:16:53:19 | access to local variable iter | null | E.cs:52:20:52:39 | call to method GetEnumerator | null |
|
||||
| E.cs:55:23:55:26 | access to local variable iter | non-null | E.cs:52:20:52:39 | call to method GetEnumerator | non-null |
|
||||
| E.cs:55:23:55:26 | access to local variable iter | null | E.cs:52:20:52:39 | call to method GetEnumerator | null |
|
||||
| E.cs:59:17:59:22 | access to local variable result | non-null | E.cs:50:22:50:45 | object creation of type List<List<String>> | non-null |
|
||||
| E.cs:59:17:59:22 | access to local variable result | null | E.cs:50:22:50:45 | object creation of type List<List<String>> | null |
|
||||
| E.cs:59:28:59:32 | access to local variable slice | non-null | E.cs:58:25:58:42 | object creation of type List<String> | non-null |
|
||||
| E.cs:59:28:59:32 | access to local variable slice | null | E.cs:58:25:58:42 | object creation of type List<String> | null |
|
||||
| E.cs:61:23:61:25 | access to local variable str | non-null | E.cs:55:23:55:34 | access to property Current | non-null |
|
||||
| E.cs:61:23:61:25 | access to local variable str | null | E.cs:55:23:55:34 | access to property Current | null |
|
||||
| E.cs:70:22:70:32 | ... == ... | false | E.cs:70:22:70:24 | access to parameter arr | non-null |
|
||||
| E.cs:70:22:70:32 | ... == ... | true | E.cs:70:22:70:24 | access to parameter arr | null |
|
||||
| E.cs:83:13:83:24 | ... != ... | false | E.cs:83:13:83:16 | access to parameter vals | null |
|
||||
| E.cs:83:13:83:24 | ... != ... | true | E.cs:83:13:83:16 | access to parameter vals | non-null |
|
||||
| E.cs:83:13:83:30 | ... && ... | true | E.cs:83:13:83:24 | ... != ... | true |
|
||||
| E.cs:83:13:83:30 | ... && ... | true | E.cs:83:29:83:30 | access to parameter b1 | true |
|
||||
| E.cs:85:18:85:29 | ... != ... | false | E.cs:85:18:85:21 | access to parameter vals | null |
|
||||
| E.cs:85:18:85:29 | ... != ... | true | E.cs:85:18:85:21 | access to parameter vals | non-null |
|
||||
| E.cs:85:18:85:35 | ... && ... | true | E.cs:85:18:85:29 | ... != ... | true |
|
||||
| E.cs:85:18:85:35 | ... && ... | true | E.cs:85:34:85:35 | access to parameter b2 | true |
|
||||
| E.cs:120:16:120:20 | !... | false | E.cs:120:17:120:20 | access to local variable stop | true |
|
||||
| E.cs:120:16:120:20 | !... | true | E.cs:120:17:120:20 | access to local variable stop | false |
|
||||
| E.cs:123:20:123:24 | !... | false | E.cs:123:21:123:24 | access to local variable stop | true |
|
||||
| E.cs:123:20:123:24 | !... | true | E.cs:123:21:123:24 | access to local variable stop | false |
|
||||
| E.cs:123:20:123:35 | ... && ... | true | E.cs:123:20:123:24 | !... | true |
|
||||
| E.cs:123:20:123:35 | ... && ... | true | E.cs:123:29:123:35 | ... < ... | true |
|
||||
| E.cs:131:25:131:29 | !... | false | E.cs:131:26:131:29 | access to local variable stop | true |
|
||||
| E.cs:131:25:131:29 | !... | true | E.cs:131:26:131:29 | access to local variable stop | false |
|
||||
| E.cs:131:26:131:29 | access to local variable stop | false | E.cs:130:28:130:33 | ... >= ... | false |
|
||||
| E.cs:131:26:131:29 | access to local variable stop | true | E.cs:130:28:130:33 | ... >= ... | true |
|
||||
| E.cs:153:13:153:16 | access to local variable obj2 | non-null | E.cs:152:23:152:26 | access to parameter obj1 | non-null |
|
||||
| E.cs:153:13:153:16 | access to local variable obj2 | null | E.cs:152:23:152:26 | access to parameter obj1 | null |
|
||||
| E.cs:153:13:153:24 | ... != ... | false | E.cs:153:13:153:16 | access to local variable obj2 | null |
|
||||
| E.cs:153:13:153:24 | ... != ... | true | E.cs:153:13:153:16 | access to local variable obj2 | non-null |
|
||||
| E.cs:153:13:153:54 | ... && ... | true | E.cs:153:13:153:24 | ... != ... | true |
|
||||
| E.cs:153:13:153:54 | ... && ... | true | E.cs:153:29:153:54 | ... > ... | true |
|
||||
| E.cs:153:29:153:32 | access to local variable obj2 | non-null | E.cs:152:23:152:26 | access to parameter obj1 | non-null |
|
||||
| E.cs:153:29:153:32 | access to local variable obj2 | null | E.cs:152:23:152:26 | access to parameter obj1 | null |
|
||||
| E.cs:155:13:155:16 | access to local variable obj2 | non-null | E.cs:152:23:152:26 | access to parameter obj1 | non-null |
|
||||
| E.cs:155:13:155:16 | access to local variable obj2 | null | E.cs:152:23:152:26 | access to parameter obj1 | null |
|
||||
| E.cs:159:13:159:16 | access to local variable obj2 | non-null | E.cs:152:23:152:26 | access to parameter obj1 | non-null |
|
||||
| E.cs:159:13:159:16 | access to local variable obj2 | null | E.cs:152:23:152:26 | access to parameter obj1 | null |
|
||||
| E.cs:164:17:164:25 | ... == ... | false | E.cs:164:17:164:17 | access to parameter a | non-null |
|
||||
| E.cs:164:17:164:25 | ... == ... | true | E.cs:164:17:164:17 | access to parameter a | null |
|
||||
| E.cs:175:19:175:29 | ... == ... | false | E.cs:175:19:175:21 | access to parameter obj | non-null |
|
||||
| E.cs:175:19:175:29 | ... == ... | true | E.cs:175:19:175:21 | access to parameter obj | null |
|
||||
| E.cs:175:19:175:42 | ... ? ... : ... | true | E.cs:175:19:175:29 | ... == ... | false |
|
||||
| E.cs:175:19:175:42 | ... ? ... : ... | true | E.cs:175:41:175:42 | access to parameter b1 | true |
|
||||
| E.cs:176:13:176:14 | access to local variable b2 | false | E.cs:175:19:175:42 | ... ? ... : ... | false |
|
||||
| E.cs:176:13:176:14 | access to local variable b2 | true | E.cs:175:19:175:42 | ... ? ... : ... | true |
|
||||
| E.cs:176:13:176:22 | ... == ... | false | E.cs:176:13:176:14 | (...) ... | non-null |
|
||||
| E.cs:176:13:176:22 | ... == ... | true | E.cs:176:13:176:14 | (...) ... | null |
|
||||
| E.cs:180:13:180:23 | ... == ... | false | E.cs:180:13:180:15 | access to parameter obj | non-null |
|
||||
| E.cs:180:13:180:23 | ... == ... | true | E.cs:180:13:180:15 | access to parameter obj | null |
|
||||
| E.cs:184:13:184:22 | ... == ... | false | E.cs:184:13:184:14 | (...) ... | non-null |
|
||||
| E.cs:184:13:184:22 | ... == ... | true | E.cs:184:13:184:14 | (...) ... | null |
|
||||
| E.cs:199:9:199:9 | access to local variable o | non-null | E.cs:198:17:198:29 | ... ? ... : ... | non-null |
|
||||
| E.cs:199:9:199:9 | access to local variable o | null | E.cs:198:17:198:29 | ... ? ... : ... | null |
|
||||
| E.cs:201:11:201:11 | access to local variable o | non-null | E.cs:198:17:198:29 | ... ? ... : ... | non-null |
|
||||
| E.cs:201:11:201:11 | access to local variable o | null | E.cs:198:17:198:29 | ... ? ... : ... | null |
|
||||
| E.cs:203:11:203:11 | access to local variable o | non-null | E.cs:198:17:198:29 | ... ? ... : ... | non-null |
|
||||
| E.cs:203:11:203:11 | access to local variable o | null | E.cs:198:17:198:29 | ... ? ... : ... | null |
|
||||
| E.cs:208:13:208:23 | ... is ... | true | E.cs:208:13:208:13 | access to parameter s | non-null |
|
||||
| E.cs:252:13:252:21 | ... != ... | false | E.cs:252:13:252:13 | access to parameter i | null |
|
||||
| E.cs:252:13:252:21 | ... != ... | true | E.cs:252:13:252:13 | access to parameter i | non-null |
|
||||
| E.cs:259:13:259:21 | ... == ... | false | E.cs:259:13:259:13 | access to parameter i | non-null |
|
||||
| E.cs:259:13:259:21 | ... == ... | true | E.cs:259:13:259:13 | access to parameter i | null |
|
||||
| Forwarding.cs:9:13:9:30 | !... | false | Forwarding.cs:9:14:9:30 | call to method IsNullOrEmpty | true |
|
||||
| Forwarding.cs:9:13:9:30 | !... | true | Forwarding.cs:9:14:9:30 | call to method IsNullOrEmpty | false |
|
||||
| Forwarding.cs:9:14:9:14 | access to local variable s | non-null | Forwarding.cs:7:20:7:23 | null | non-null |
|
||||
| Forwarding.cs:9:14:9:14 | access to local variable s | null | Forwarding.cs:7:20:7:23 | null | null |
|
||||
| Forwarding.cs:9:14:9:30 | call to method IsNullOrEmpty | false | Forwarding.cs:9:14:9:14 | access to local variable s | non-null |
|
||||
| Forwarding.cs:11:31:11:31 | access to local variable s | non-null | Forwarding.cs:7:20:7:23 | null | non-null |
|
||||
| Forwarding.cs:11:31:11:31 | access to local variable s | null | Forwarding.cs:7:20:7:23 | null | null |
|
||||
| Forwarding.cs:14:13:14:13 | access to local variable s | non-null | Forwarding.cs:7:20:7:23 | null | non-null |
|
||||
| Forwarding.cs:14:13:14:13 | access to local variable s | null | Forwarding.cs:7:20:7:23 | null | null |
|
||||
| Forwarding.cs:14:13:14:32 | call to method IsNotNullOrEmpty | true | Forwarding.cs:14:13:14:13 | access to local variable s | non-null |
|
||||
| Forwarding.cs:16:31:16:31 | access to local variable s | non-null | Forwarding.cs:7:20:7:23 | null | non-null |
|
||||
| Forwarding.cs:16:31:16:31 | access to local variable s | null | Forwarding.cs:7:20:7:23 | null | null |
|
||||
| Forwarding.cs:19:13:19:23 | !... | false | Forwarding.cs:19:14:19:23 | call to method IsNull | true |
|
||||
| Forwarding.cs:19:13:19:23 | !... | true | Forwarding.cs:19:14:19:23 | call to method IsNull | false |
|
||||
| Forwarding.cs:19:14:19:14 | access to local variable s | non-null | Forwarding.cs:7:20:7:23 | null | non-null |
|
||||
| Forwarding.cs:19:14:19:14 | access to local variable s | null | Forwarding.cs:7:20:7:23 | null | null |
|
||||
| Forwarding.cs:19:14:19:23 | call to method IsNull | false | Forwarding.cs:19:14:19:14 | access to local variable s | non-null |
|
||||
| Forwarding.cs:19:14:19:23 | call to method IsNull | true | Forwarding.cs:19:14:19:14 | access to local variable s | null |
|
||||
| Forwarding.cs:21:31:21:31 | access to local variable s | non-null | Forwarding.cs:7:20:7:23 | null | non-null |
|
||||
| Forwarding.cs:21:31:21:31 | access to local variable s | null | Forwarding.cs:7:20:7:23 | null | null |
|
||||
| Forwarding.cs:24:13:24:13 | access to local variable s | non-null | Forwarding.cs:7:20:7:23 | null | non-null |
|
||||
| Forwarding.cs:24:13:24:13 | access to local variable s | null | Forwarding.cs:7:20:7:23 | null | null |
|
||||
| Forwarding.cs:24:13:24:25 | call to method IsNotNull | false | Forwarding.cs:24:13:24:13 | access to local variable s | null |
|
||||
| Forwarding.cs:24:13:24:25 | call to method IsNotNull | true | Forwarding.cs:24:13:24:13 | access to local variable s | non-null |
|
||||
| Forwarding.cs:26:31:26:31 | access to local variable s | non-null | Forwarding.cs:7:20:7:23 | null | non-null |
|
||||
| Forwarding.cs:26:31:26:31 | access to local variable s | null | Forwarding.cs:7:20:7:23 | null | null |
|
||||
| Forwarding.cs:29:13:29:24 | call to method IsNotNull | true | Forwarding.cs:29:23:29:23 | access to local variable s | non-null |
|
||||
| Forwarding.cs:29:23:29:23 | access to local variable s | non-null | Forwarding.cs:7:20:7:23 | null | non-null |
|
||||
| Forwarding.cs:29:23:29:23 | access to local variable s | null | Forwarding.cs:7:20:7:23 | null | null |
|
||||
| Forwarding.cs:31:31:31:31 | access to local variable s | non-null | Forwarding.cs:7:20:7:23 | null | non-null |
|
||||
| Forwarding.cs:31:31:31:31 | access to local variable s | null | Forwarding.cs:7:20:7:23 | null | null |
|
||||
| Forwarding.cs:34:13:34:29 | call to method IsNotNullWrong | false | Forwarding.cs:34:28:34:28 | access to local variable s | non-null |
|
||||
| Forwarding.cs:34:28:34:28 | access to local variable s | non-null | Forwarding.cs:7:20:7:23 | null | non-null |
|
||||
| Forwarding.cs:34:28:34:28 | access to local variable s | null | Forwarding.cs:7:20:7:23 | null | null |
|
||||
| Forwarding.cs:36:31:36:31 | access to local variable s | non-null | Forwarding.cs:7:20:7:23 | null | non-null |
|
||||
| Forwarding.cs:36:31:36:31 | access to local variable s | null | Forwarding.cs:7:20:7:23 | null | null |
|
||||
| Forwarding.cs:39:25:39:25 | access to local variable s | non-null | Forwarding.cs:7:20:7:23 | null | non-null |
|
||||
| Forwarding.cs:39:25:39:25 | access to local variable s | null | Forwarding.cs:7:20:7:23 | null | null |
|
||||
| Forwarding.cs:40:27:40:27 | access to local variable s | non-null | Forwarding.cs:7:20:7:23 | null | non-null |
|
||||
| Forwarding.cs:40:27:40:27 | access to local variable s | null | Forwarding.cs:7:20:7:23 | null | null |
|
||||
| Forwarding.cs:45:16:45:26 | ... is ... | true | Forwarding.cs:45:16:45:16 | access to parameter o | non-null |
|
||||
| Forwarding.cs:45:30:45:61 | !... | false | Forwarding.cs:45:31:45:61 | call to method IsNullOrEmpty | true |
|
||||
| Forwarding.cs:45:30:45:61 | !... | true | Forwarding.cs:45:31:45:61 | call to method IsNullOrEmpty | false |
|
||||
| Forwarding.cs:45:31:45:61 | call to method IsNullOrEmpty | false | Forwarding.cs:45:52:45:60 | (...) ... | non-null |
|
||||
| Forwarding.cs:45:65:45:75 | !... | false | Forwarding.cs:45:66:45:75 | call to method IsNull | true |
|
||||
| Forwarding.cs:45:65:45:75 | !... | true | Forwarding.cs:45:66:45:75 | call to method IsNull | false |
|
||||
| Forwarding.cs:45:66:45:75 | call to method IsNull | false | Forwarding.cs:45:66:45:66 | access to parameter o | non-null |
|
||||
| Forwarding.cs:45:66:45:75 | call to method IsNull | true | Forwarding.cs:45:66:45:66 | access to parameter o | null |
|
||||
| Forwarding.cs:50:13:50:23 | ... is ... | true | Forwarding.cs:50:13:50:13 | access to parameter o | non-null |
|
||||
| Forwarding.cs:52:20:52:51 | !... | false | Forwarding.cs:52:21:52:51 | call to method IsNullOrEmpty | true |
|
||||
| Forwarding.cs:52:20:52:51 | !... | true | Forwarding.cs:52:21:52:51 | call to method IsNullOrEmpty | false |
|
||||
| Forwarding.cs:52:21:52:51 | call to method IsNullOrEmpty | false | Forwarding.cs:52:42:52:50 | (...) ... | non-null |
|
||||
| Forwarding.cs:59:13:59:21 | ... == ... | false | Forwarding.cs:59:13:59:13 | access to parameter o | non-null |
|
||||
| Forwarding.cs:59:13:59:21 | ... == ... | true | Forwarding.cs:59:13:59:13 | access to parameter o | null |
|
||||
| Forwarding.cs:68:16:68:38 | call to method IsNullOrEmpty | false | Forwarding.cs:68:37:68:37 | access to parameter s | non-null |
|
||||
| Forwarding.cs:73:16:73:39 | !... | false | Forwarding.cs:73:17:73:39 | call to method IsNullOrEmpty | true |
|
||||
| Forwarding.cs:73:16:73:39 | !... | true | Forwarding.cs:73:17:73:39 | call to method IsNullOrEmpty | false |
|
||||
| Forwarding.cs:73:17:73:39 | call to method IsNullOrEmpty | false | Forwarding.cs:73:38:73:38 | access to parameter s | non-null |
|
||||
| Forwarding.cs:78:16:78:39 | call to method ReferenceEquals | false | Forwarding.cs:78:32:78:32 | access to parameter o | non-null |
|
||||
| Forwarding.cs:78:16:78:39 | call to method ReferenceEquals | true | Forwarding.cs:78:32:78:32 | access to parameter o | null |
|
||||
| Forwarding.cs:83:16:83:24 | ... != ... | false | Forwarding.cs:83:16:83:16 | access to parameter o | null |
|
||||
| Forwarding.cs:83:16:83:24 | ... != ... | true | Forwarding.cs:83:16:83:16 | access to parameter o | non-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: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 |
|
||||
| GuardedString.cs:11:31:11:31 | access to local variable s | non-null | GuardedString.cs:7:20:7:32 | ... ? ... : ... | non-null |
|
||||
| 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: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:32 | ... ? ... : ... | non-null |
|
||||
| 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:32 | ... ? ... : ... | non-null |
|
||||
| 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:32 | ... ? ... : ... | non-null |
|
||||
| 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:32 | ... ? ... : ... | non-null |
|
||||
| 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:32 | ... ? ... : ... | non-null |
|
||||
| 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:32 | ... ? ... : ... | non-null |
|
||||
| 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 |
|
||||
| GuardedString.cs:34:15:34:21 | access to property Length | null | GuardedString.cs:34:13:34:13 | access to local variable s | null |
|
||||
| GuardedString.cs:35:31:35:31 | access to local variable s | non-null | GuardedString.cs:7:20:7:32 | ... ? ... : ... | non-null |
|
||||
| GuardedString.cs:35:31:35:31 | access to local variable s | null | GuardedString.cs:7:20:7:32 | ... ? ... : ... | null |
|
||||
| GuardedString.cs:37:31:37:31 | access to local variable s | non-null | GuardedString.cs:7:20:7:32 | ... ? ... : ... | non-null |
|
||||
| GuardedString.cs:37:31:37:31 | access to local variable s | null | GuardedString.cs:7:20:7:32 | ... ? ... : ... | null |
|
||||
| StringConcatenation.cs:8:9:8:9 | access to local variable s | non-null | StringConcatenation.cs:7:20:7:23 | null | non-null |
|
||||
| StringConcatenation.cs:8:9:8:9 | access to local variable s | null | StringConcatenation.cs:7:20:7:23 | null | null |
|
||||
| StringConcatenation.cs:8:9:8:18 | ... + ... | non-null | StringConcatenation.cs:8:9:8:9 | access to local variable s | non-null |
|
||||
| StringConcatenation.cs:8:9:8:18 | ... + ... | null | StringConcatenation.cs:8:9:8:9 | access to local variable s | null |
|
||||
| StringConcatenation.cs:9:13:9:13 | access to local variable s | non-null | StringConcatenation.cs:8:9:8:18 | ... + ... | non-null |
|
||||
| StringConcatenation.cs:9:13:9:13 | access to local variable s | null | StringConcatenation.cs:8:9:8:18 | ... + ... | null |
|
||||
| StringConcatenation.cs:15:16:15:22 | ... != ... | false | StringConcatenation.cs:15:16:15:16 | access to local variable s | non-null |
|
||||
| StringConcatenation.cs:22:16:22:22 | ... != ... | false | StringConcatenation.cs:22:16:22:16 | access to local variable s | non-null |
|
||||
| StringConcatenation.cs:23:13:23:22 | ... + ... | non-null | StringConcatenation.cs:23:13:23:13 | access to local variable s | non-null |
|
||||
| StringConcatenation.cs:23:13:23:22 | ... + ... | null | StringConcatenation.cs:23:13:23:13 | access to local variable s | null |
|
||||
| StringConcatenation.cs:30:9:30:9 | access to local variable s | non-null | StringConcatenation.cs:29:20:29:24 | "abc" | non-null |
|
||||
| StringConcatenation.cs:30:9:30:9 | access to local variable s | null | StringConcatenation.cs:29:20:29:24 | "abc" | null |
|
||||
| StringConcatenation.cs:31:13:31:13 | access to local variable s | non-null | StringConcatenation.cs:30:9:30:17 | ... + ... | non-null |
|
||||
| StringConcatenation.cs:31:13:31:13 | access to local variable s | null | StringConcatenation.cs:30:9:30:17 | ... + ... | null |
|
||||
6
csharp/ql/test/query-tests/Nullness/Implications.ql
Normal file
6
csharp/ql/test/query-tests/Nullness/Implications.ql
Normal file
@@ -0,0 +1,6 @@
|
||||
import csharp
|
||||
import semmle.code.csharp.controlflow.Guards
|
||||
|
||||
query predicate impliesStep(Expr e1, AbstractValue v1, Expr e2, AbstractValue v2) {
|
||||
Internal::impliesStep(e1, v1, e2, v2)
|
||||
}
|
||||
@@ -1,17 +1,26 @@
|
||||
| A.cs:15:13:15:15 | access to local variable not | Variable $@ is always null here. | A.cs:12:16:12:18 | not | not |
|
||||
| A.cs:30:15:30:33 | access to local variable synchronized_always | Variable $@ is always null here. | A.cs:29:16:29:34 | synchronized_always | synchronized_always |
|
||||
| A.cs:77:31:77:39 | access to local variable do_always | Variable $@ is always null here. | A.cs:74:16:74:24 | do_always | do_always |
|
||||
| A.cs:111:31:111:42 | access to local variable while_always | Variable $@ is always null here. | A.cs:108:16:108:27 | while_always | while_always |
|
||||
| A.cs:129:9:129:18 | access to local variable array_null | Variable $@ is always null here. | A.cs:128:15:128:24 | array_null | array_null |
|
||||
| A.cs:149:31:149:39 | access to local variable if_always | Variable $@ is always null here. | A.cs:146:16:146:24 | if_always | if_always |
|
||||
| A.cs:169:27:169:32 | access to local variable for_ok | Variable $@ is always null here. | A.cs:163:16:163:21 | for_ok | for_ok |
|
||||
| A.cs:174:31:174:40 | access to local variable for_always | Variable $@ is always null here. | A.cs:172:21:172:30 | for_always | for_always |
|
||||
| A.cs:191:27:191:37 | access to local variable arrayaccess | Variable $@ is always null here. | A.cs:186:15:186:25 | arrayaccess | arrayaccess |
|
||||
| A.cs:192:27:192:37 | access to local variable fieldaccess | Variable $@ is always null here. | A.cs:187:18:187:28 | fieldaccess | fieldaccess |
|
||||
| A.cs:193:28:193:39 | access to local variable methodaccess | Variable $@ is always null here. | A.cs:188:16:188:27 | methodaccess | methodaccess |
|
||||
| A.cs:194:27:194:36 | access to local variable methodcall | Variable $@ is always null here. | A.cs:189:16:189:25 | methodcall | methodcall |
|
||||
| A.cs:247:31:247:44 | access to local variable eq_call_always | Variable $@ is always null here. | A.cs:241:11:241:24 | eq_call_always | eq_call_always |
|
||||
| A.cs:258:31:258:45 | access to local variable neq_call_always | Variable $@ is always null here. | A.cs:244:11:244:25 | neq_call_always | neq_call_always |
|
||||
| A.cs:8:15:8:32 | access to local variable synchronizedAlways | Variable $@ is always null here. | A.cs:7:16:7:33 | synchronizedAlways | synchronizedAlways |
|
||||
| A.cs:17:9:17:17 | access to local variable arrayNull | Variable $@ is always null here. | A.cs:16:15:16:23 | arrayNull | arrayNull |
|
||||
| A.cs:31:27:31:37 | access to local variable arrayAccess | Variable $@ is always null here. | A.cs:26:15:26:25 | arrayAccess | arrayAccess |
|
||||
| A.cs:32:27:32:37 | access to local variable fieldAccess | Variable $@ is always null here. | A.cs:27:18:27:28 | fieldAccess | fieldAccess |
|
||||
| A.cs:33:28:33:39 | access to local variable methodAccess | Variable $@ is always null here. | A.cs:28:16:28:27 | methodAccess | methodAccess |
|
||||
| A.cs:34:27:34:36 | access to local variable methodCall | Variable $@ is always null here. | A.cs:29:16:29:25 | methodCall | methodCall |
|
||||
| Assert.cs:15:27:15:27 | access to local variable s | Variable $@ is always null here. | Assert.cs:9:16:9:16 | s | s |
|
||||
| Assert.cs:23:27:23:27 | access to local variable s | Variable $@ is always null here. | Assert.cs:9:16:9:16 | s | s |
|
||||
| Assert.cs:31:27:31:27 | access to local variable s | Variable $@ is always null here. | Assert.cs:9:16:9:16 | s | s |
|
||||
| Assert.cs:47:27:47:27 | access to local variable s | Variable $@ is always null here. | Assert.cs:9:16:9:16 | s | s |
|
||||
| Assert.cs:51:27:51:27 | access to local variable s | Variable $@ is always null here. | Assert.cs:9:16:9:16 | s | s |
|
||||
| B.cs:13:13:13:24 | access to local variable eqCallAlways | Variable $@ is always null here. | B.cs:7:11:7:22 | eqCallAlways | eqCallAlways |
|
||||
| B.cs:24:13:24:25 | access to local variable neqCallAlways | Variable $@ is always null here. | B.cs:10:11:10:23 | neqCallAlways | neqCallAlways |
|
||||
| C.cs:18:13:18:13 | access to local variable o | Variable $@ is always null here. | C.cs:10:16:10:16 | o | o |
|
||||
| C.cs:42:9:42:9 | access to local variable s | Variable $@ is always null here. | C.cs:40:13:40:13 | s | s |
|
||||
| C.cs:57:9:57:10 | access to local variable o2 | Variable $@ is always null here. | C.cs:55:13:55:14 | o2 | o2 |
|
||||
| C.cs:163:13:163:13 | access to local variable s | Variable $@ is always null here. | C.cs:152:13:152:13 | s | s |
|
||||
| C.cs:197:13:197:13 | access to local variable s | Variable $@ is always null here. | C.cs:186:13:186:13 | s | s |
|
||||
| C.cs:219:13:219:13 | access to local variable s | Variable $@ is always null here. | C.cs:211:13:211:13 | s | s |
|
||||
| C.cs:234:9:234:9 | access to local variable s | Variable $@ is always null here. | C.cs:229:16:229:16 | s | s |
|
||||
| C.cs:238:13:238:13 | access to local variable s | Variable $@ is always null here. | C.cs:229:16:229:16 | s | s |
|
||||
| C.cs:250:9:250:9 | access to local variable a | Variable $@ is always null here. | C.cs:249:15:249:15 | a | a |
|
||||
| C.cs:261:9:261:10 | access to local variable ia | Variable $@ is always null here. | C.cs:258:15:258:16 | ia | ia |
|
||||
| C.cs:262:20:262:21 | access to local variable sa | Variable $@ is always null here. | C.cs:259:18:259:19 | sa | sa |
|
||||
| D.cs:385:13:385:15 | access to local variable ioe | Variable $@ is always null here. | D.cs:378:19:378:21 | ioe | ioe |
|
||||
| E.cs:229:13:229:13 | access to local variable x | Variable $@ is always null here. | E.cs:225:13:225:13 | x | x |
|
||||
|
||||
235
csharp/ql/test/query-tests/Nullness/NullCheck.expected
Normal file
235
csharp/ql/test/query-tests/Nullness/NullCheck.expected
Normal file
@@ -0,0 +1,235 @@
|
||||
| Assert.cs:10:22:10:30 | ... != ... | Assert.cs:10:22:10:22 | access to local variable s | false | true |
|
||||
| Assert.cs:10:22:10:30 | ... != ... | Assert.cs:10:22:10:22 | access to local variable s | true | false |
|
||||
| Assert.cs:22:23:22:31 | ... == ... | Assert.cs:22:23:22:23 | access to local variable s | false | false |
|
||||
| Assert.cs:22:23:22:31 | ... == ... | Assert.cs:22:23:22:23 | access to local variable s | true | true |
|
||||
| Assert.cs:26:23:26:31 | ... != ... | Assert.cs:26:23:26:23 | access to local variable s | false | true |
|
||||
| Assert.cs:26:23:26:31 | ... != ... | Assert.cs:26:23:26:23 | access to local variable s | true | false |
|
||||
| Assert.cs:30:24:30:32 | ... != ... | Assert.cs:30:24:30:24 | access to local variable s | false | true |
|
||||
| Assert.cs:30:24:30:32 | ... != ... | Assert.cs:30:24:30:24 | access to local variable s | true | false |
|
||||
| Assert.cs:34:24:34:32 | ... == ... | Assert.cs:34:24:34:24 | access to local variable s | false | false |
|
||||
| Assert.cs:34:24:34:32 | ... == ... | Assert.cs:34:24:34:24 | access to local variable s | true | true |
|
||||
| Assert.cs:38:23:38:31 | ... != ... | Assert.cs:38:23:38:23 | access to local variable s | false | true |
|
||||
| Assert.cs:38:23:38:31 | ... != ... | Assert.cs:38:23:38:23 | access to local variable s | true | false |
|
||||
| Assert.cs:42:24:42:32 | ... == ... | Assert.cs:42:24:42:24 | access to local variable s | false | false |
|
||||
| Assert.cs:42:24:42:32 | ... == ... | Assert.cs:42:24:42:24 | access to local variable s | true | true |
|
||||
| Assert.cs:46:23:46:31 | ... == ... | Assert.cs:46:23:46:23 | access to local variable s | false | false |
|
||||
| Assert.cs:46:23:46:31 | ... == ... | Assert.cs:46:23:46:23 | access to local variable s | true | true |
|
||||
| Assert.cs:50:24:50:32 | ... != ... | Assert.cs:50:24:50:24 | access to local variable s | false | true |
|
||||
| Assert.cs:50:24:50:32 | ... != ... | Assert.cs:50:24:50:24 | access to local variable s | true | false |
|
||||
| B.cs:12:13:12:32 | call to operator == | B.cs:12:13:12:24 | access to local variable eqCallAlways | false | false |
|
||||
| B.cs:12:13:12:32 | call to operator == | B.cs:12:13:12:24 | access to local variable eqCallAlways | true | true |
|
||||
| B.cs:15:13:15:22 | call to operator != | B.cs:15:13:15:14 | access to local variable b2 | false | true |
|
||||
| B.cs:15:13:15:22 | call to operator != | B.cs:15:13:15:14 | access to local variable b2 | true | false |
|
||||
| B.cs:18:13:18:22 | call to operator == | B.cs:18:13:18:14 | access to local variable b3 | false | false |
|
||||
| B.cs:18:13:18:22 | call to operator == | B.cs:18:13:18:14 | access to local variable b3 | true | true |
|
||||
| B.cs:22:13:22:33 | call to operator != | B.cs:22:13:22:25 | access to local variable neqCallAlways | false | true |
|
||||
| B.cs:22:13:22:33 | call to operator != | B.cs:22:13:22:25 | access to local variable neqCallAlways | true | false |
|
||||
| B.cs:53:17:53:33 | ... != ... | B.cs:53:17:53:25 | (...) ... | false | true |
|
||||
| B.cs:53:17:53:33 | ... != ... | B.cs:53:17:53:25 | (...) ... | true | false |
|
||||
| C.cs:11:19:11:27 | ... == ... | C.cs:11:19:11:19 | access to local variable o | false | false |
|
||||
| C.cs:11:19:11:27 | ... == ... | C.cs:11:19:11:19 | access to local variable o | true | true |
|
||||
| C.cs:16:15:16:23 | ... != ... | C.cs:16:15:16:15 | access to local variable o | false | true |
|
||||
| C.cs:16:15:16:23 | ... != ... | C.cs:16:15:16:15 | access to local variable o | true | false |
|
||||
| C.cs:24:13:24:21 | ... != ... | C.cs:24:13:24:13 | access to parameter o | false | true |
|
||||
| C.cs:24:13:24:21 | ... != ... | C.cs:24:13:24:13 | access to parameter o | true | false |
|
||||
| C.cs:28:37:28:45 | ... == ... | C.cs:28:37:28:37 | access to parameter o | false | false |
|
||||
| C.cs:28:37:28:45 | ... == ... | C.cs:28:37:28:37 | access to parameter o | true | true |
|
||||
| C.cs:30:40:30:48 | ... != ... | C.cs:30:40:30:40 | access to parameter o | false | true |
|
||||
| C.cs:30:40:30:48 | ... != ... | C.cs:30:40:30:40 | access to parameter o | true | false |
|
||||
| C.cs:34:13:34:21 | ... == ... | C.cs:34:13:34:13 | access to parameter o | false | false |
|
||||
| C.cs:34:13:34:21 | ... == ... | C.cs:34:13:34:13 | access to parameter o | true | true |
|
||||
| C.cs:41:22:41:30 | ... == ... | C.cs:41:22:41:22 | access to local variable s | false | false |
|
||||
| C.cs:41:22:41:30 | ... == ... | C.cs:41:22:41:22 | access to local variable s | true | true |
|
||||
| C.cs:45:22:45:30 | ... != ... | C.cs:45:22:45:22 | access to local variable s | false | true |
|
||||
| C.cs:45:22:45:30 | ... != ... | C.cs:45:22:45:22 | access to local variable s | true | false |
|
||||
| C.cs:78:13:78:24 | call to method IsNotNull | C.cs:78:23:78:23 | access to local variable o | false | true |
|
||||
| C.cs:78:13:78:24 | call to method IsNotNull | C.cs:78:23:78:23 | access to local variable o | true | false |
|
||||
| C.cs:82:14:82:22 | call to method IsNull | C.cs:82:21:82:21 | access to local variable o | false | false |
|
||||
| C.cs:82:14:82:22 | call to method IsNull | C.cs:82:21:82:21 | access to local variable o | true | true |
|
||||
| C.cs:89:13:89:23 | ... is ... | C.cs:89:13:89:13 | access to local variable o | true | false |
|
||||
| C.cs:114:22:114:36 | ... == ... | C.cs:114:22:114:28 | access to local variable colours | false | false |
|
||||
| C.cs:114:22:114:36 | ... == ... | C.cs:114:22:114:28 | access to local variable colours | true | true |
|
||||
| C.cs:121:13:121:28 | ... == ... | C.cs:121:13:121:20 | access to local variable children | false | false |
|
||||
| C.cs:121:13:121:28 | ... == ... | C.cs:121:13:121:20 | access to local variable children | true | true |
|
||||
| C.cs:130:13:130:38 | ... == ... | C.cs:130:14:130:29 | ... = ... | false | false |
|
||||
| C.cs:130:13:130:38 | ... == ... | C.cs:130:14:130:29 | ... = ... | true | true |
|
||||
| C.cs:146:13:146:39 | ... != ... | C.cs:146:14:146:30 | ... = ... | false | true |
|
||||
| C.cs:146:13:146:39 | ... != ... | C.cs:146:14:146:30 | ... = ... | true | false |
|
||||
| C.cs:158:16:158:24 | ... != ... | C.cs:158:16:158:16 | access to local variable s | false | true |
|
||||
| C.cs:158:16:158:24 | ... != ... | C.cs:158:16:158:16 | access to local variable s | true | false |
|
||||
| C.cs:166:16:166:24 | ... != ... | C.cs:166:16:166:16 | access to local variable s | false | true |
|
||||
| C.cs:166:16:166:24 | ... != ... | C.cs:166:16:166:16 | access to local variable s | true | false |
|
||||
| C.cs:173:16:173:24 | ... != ... | C.cs:173:16:173:16 | access to local variable s | false | true |
|
||||
| C.cs:173:16:173:24 | ... != ... | C.cs:173:16:173:16 | access to local variable s | true | false |
|
||||
| C.cs:187:16:187:24 | ... != ... | C.cs:187:16:187:16 | access to local variable s | false | true |
|
||||
| C.cs:187:16:187:24 | ... != ... | C.cs:187:16:187:16 | access to local variable s | true | false |
|
||||
| C.cs:212:13:212:21 | ... != ... | C.cs:212:13:212:13 | access to local variable s | false | true |
|
||||
| C.cs:212:13:212:21 | ... != ... | C.cs:212:13:212:13 | access to local variable s | true | false |
|
||||
| C.cs:218:13:218:21 | ... == ... | C.cs:218:13:218:13 | access to local variable s | false | false |
|
||||
| C.cs:218:13:218:21 | ... == ... | C.cs:218:13:218:13 | access to local variable s | true | true |
|
||||
| C.cs:222:13:222:21 | ... != ... | C.cs:222:13:222:13 | access to local variable s | false | true |
|
||||
| C.cs:222:13:222:21 | ... != ... | C.cs:222:13:222:13 | access to local variable s | true | false |
|
||||
| C.cs:230:22:230:30 | ... != ... | C.cs:230:22:230:22 | access to local variable s | false | true |
|
||||
| C.cs:230:22:230:30 | ... != ... | C.cs:230:22:230:22 | access to local variable s | true | false |
|
||||
| C.cs:236:24:236:32 | ... == ... | C.cs:236:24:236:24 | access to local variable s | false | false |
|
||||
| C.cs:236:24:236:32 | ... == ... | C.cs:236:24:236:24 | access to local variable s | true | true |
|
||||
| D.cs:28:13:28:25 | ... != ... | D.cs:28:13:28:17 | access to parameter param | false | true |
|
||||
| D.cs:28:13:28:25 | ... != ... | D.cs:28:13:28:17 | access to parameter param | true | false |
|
||||
| D.cs:37:13:37:23 | ... is ... | D.cs:37:13:37:13 | access to parameter x | true | false |
|
||||
| D.cs:38:13:38:21 | ... == ... | D.cs:38:13:38:13 | access to parameter x | false | false |
|
||||
| D.cs:38:13:38:21 | ... == ... | D.cs:38:13:38:13 | access to parameter x | true | true |
|
||||
| D.cs:39:16:39:24 | ... == ... | D.cs:39:16:39:16 | access to parameter x | false | false |
|
||||
| D.cs:39:16:39:24 | ... == ... | D.cs:39:16:39:16 | access to parameter x | true | true |
|
||||
| D.cs:45:13:45:22 | ... != ... | D.cs:45:13:45:14 | access to local variable o1 | false | true |
|
||||
| D.cs:45:13:45:22 | ... != ... | D.cs:45:13:45:14 | access to local variable o1 | true | false |
|
||||
| D.cs:48:13:48:24 | ... is ... | D.cs:48:13:48:14 | access to local variable o2 | true | false |
|
||||
| D.cs:51:13:51:44 | ... != ... | D.cs:51:14:51:35 | ... = ... | false | true |
|
||||
| D.cs:51:13:51:44 | ... != ... | D.cs:51:14:51:35 | ... = ... | true | false |
|
||||
| D.cs:55:23:55:32 | ... != ... | D.cs:55:23:55:24 | access to local variable o4 | false | true |
|
||||
| D.cs:55:23:55:32 | ... != ... | D.cs:55:23:55:24 | access to local variable o4 | true | false |
|
||||
| D.cs:58:19:58:28 | ... != ... | D.cs:58:19:58:20 | access to local variable o4 | false | true |
|
||||
| D.cs:58:19:58:28 | ... != ... | D.cs:58:19:58:20 | access to local variable o4 | true | false |
|
||||
| D.cs:59:13:59:22 | ... != ... | D.cs:59:13:59:14 | access to local variable o5 | false | true |
|
||||
| D.cs:59:13:59:22 | ... != ... | D.cs:59:13:59:14 | access to local variable o5 | true | false |
|
||||
| D.cs:61:13:61:22 | ... != ... | D.cs:61:13:61:14 | access to local variable o4 | false | true |
|
||||
| D.cs:61:13:61:22 | ... != ... | D.cs:61:13:61:14 | access to local variable o4 | true | false |
|
||||
| D.cs:65:14:65:29 | call to method CustomIsNull | D.cs:65:27:65:28 | access to local variable o6 | false | false |
|
||||
| D.cs:65:14:65:29 | call to method CustomIsNull | D.cs:65:27:65:28 | access to local variable o6 | true | true |
|
||||
| D.cs:69:18:69:27 | ... != ... | D.cs:69:18:69:19 | access to local variable o7 | false | true |
|
||||
| D.cs:69:18:69:27 | ... != ... | D.cs:69:18:69:19 | access to local variable o7 | true | false |
|
||||
| D.cs:76:21:76:30 | ... == ... | D.cs:76:21:76:22 | access to local variable o8 | false | false |
|
||||
| D.cs:76:21:76:30 | ... == ... | D.cs:76:21:76:22 | access to local variable o8 | true | true |
|
||||
| D.cs:110:26:110:35 | ... != ... | D.cs:110:26:110:27 | access to local variable xs | false | true |
|
||||
| D.cs:110:26:110:35 | ... != ... | D.cs:110:26:110:27 | access to local variable xs | true | false |
|
||||
| D.cs:118:13:118:21 | ... == ... | D.cs:118:13:118:13 | access to local variable x | false | false |
|
||||
| D.cs:118:13:118:21 | ... == ... | D.cs:118:13:118:13 | access to local variable x | true | true |
|
||||
| D.cs:119:13:119:21 | ... == ... | D.cs:119:13:119:13 | access to local variable x | false | false |
|
||||
| D.cs:119:13:119:21 | ... == ... | D.cs:119:13:119:13 | access to local variable x | true | true |
|
||||
| D.cs:127:20:127:28 | ... == ... | D.cs:127:20:127:20 | access to parameter a | false | false |
|
||||
| D.cs:127:20:127:28 | ... == ... | D.cs:127:20:127:20 | access to parameter a | true | true |
|
||||
| D.cs:128:20:128:28 | ... == ... | D.cs:128:20:128:20 | access to parameter b | false | false |
|
||||
| D.cs:128:20:128:28 | ... == ... | D.cs:128:20:128:20 | access to parameter b | true | true |
|
||||
| D.cs:139:13:139:21 | ... != ... | D.cs:139:13:139:13 | access to parameter a | false | true |
|
||||
| D.cs:139:13:139:21 | ... != ... | D.cs:139:13:139:13 | access to parameter a | true | false |
|
||||
| D.cs:152:17:152:27 | ... != ... | D.cs:152:17:152:19 | access to parameter obj | false | true |
|
||||
| D.cs:152:17:152:27 | ... != ... | D.cs:152:17:152:19 | access to parameter obj | true | false |
|
||||
| D.cs:196:13:196:21 | ... == ... | D.cs:196:13:196:13 | access to local variable o | false | false |
|
||||
| D.cs:196:13:196:21 | ... == ... | D.cs:196:13:196:13 | access to local variable o | true | true |
|
||||
| D.cs:206:17:206:25 | ... == ... | D.cs:206:17:206:17 | access to local variable e | false | false |
|
||||
| D.cs:206:17:206:25 | ... == ... | D.cs:206:17:206:17 | access to local variable e | true | true |
|
||||
| D.cs:212:18:212:26 | ... == ... | D.cs:212:18:212:18 | access to local variable n | false | false |
|
||||
| D.cs:212:18:212:26 | ... == ... | D.cs:212:18:212:18 | access to local variable n | true | true |
|
||||
| D.cs:216:13:216:22 | ... == ... | D.cs:216:13:216:14 | access to local variable o3 | false | false |
|
||||
| D.cs:216:13:216:22 | ... == ... | D.cs:216:13:216:14 | access to local variable o3 | true | true |
|
||||
| D.cs:221:13:221:22 | ... == ... | D.cs:221:13:221:14 | access to local variable o4 | false | false |
|
||||
| D.cs:221:13:221:22 | ... == ... | D.cs:221:13:221:14 | access to local variable o4 | true | true |
|
||||
| D.cs:242:13:242:25 | ... == ... | D.cs:242:13:242:17 | access to local variable other | false | false |
|
||||
| D.cs:242:13:242:25 | ... == ... | D.cs:242:13:242:17 | access to local variable other | true | true |
|
||||
| D.cs:244:13:244:25 | ... != ... | D.cs:244:13:244:17 | access to local variable other | false | true |
|
||||
| D.cs:244:13:244:25 | ... != ... | D.cs:244:13:244:17 | access to local variable other | true | false |
|
||||
| D.cs:266:13:266:27 | ... is ... | D.cs:266:13:266:17 | access to local variable other | true | false |
|
||||
| D.cs:336:13:336:23 | ... == ... | D.cs:336:13:336:15 | access to parameter obj | false | false |
|
||||
| D.cs:336:13:336:23 | ... == ... | D.cs:336:13:336:15 | access to parameter obj | true | true |
|
||||
| D.cs:341:13:341:23 | ... != ... | D.cs:341:13:341:15 | access to local variable msg | false | true |
|
||||
| D.cs:341:13:341:23 | ... != ... | D.cs:341:13:341:15 | access to local variable msg | true | false |
|
||||
| D.cs:367:27:367:35 | ... == ... | D.cs:367:27:367:27 | access to local variable b | false | false |
|
||||
| D.cs:367:27:367:35 | ... == ... | D.cs:367:27:367:27 | access to local variable b | true | true |
|
||||
| D.cs:382:13:382:23 | ... != ... | D.cs:382:13:382:15 | access to local variable ioe | false | true |
|
||||
| D.cs:382:13:382:23 | ... != ... | D.cs:382:13:382:15 | access to local variable ioe | true | false |
|
||||
| D.cs:390:20:390:28 | ... == ... | D.cs:390:20:390:20 | access to parameter a | false | false |
|
||||
| D.cs:390:20:390:28 | ... == ... | D.cs:390:20:390:20 | access to parameter a | true | true |
|
||||
| D.cs:397:20:397:28 | ... == ... | D.cs:397:20:397:20 | access to parameter b | false | false |
|
||||
| D.cs:397:20:397:28 | ... == ... | D.cs:397:20:397:20 | access to parameter b | true | true |
|
||||
| D.cs:407:14:407:22 | ... != ... | D.cs:407:14:407:14 | access to parameter x | false | true |
|
||||
| D.cs:407:14:407:22 | ... != ... | D.cs:407:14:407:14 | access to parameter x | true | false |
|
||||
| D.cs:407:27:407:35 | ... == ... | D.cs:407:27:407:27 | access to parameter y | false | false |
|
||||
| D.cs:407:27:407:35 | ... == ... | D.cs:407:27:407:27 | access to parameter y | true | true |
|
||||
| D.cs:407:42:407:50 | ... == ... | D.cs:407:42:407:42 | access to parameter x | false | false |
|
||||
| D.cs:407:42:407:50 | ... == ... | D.cs:407:42:407:42 | access to parameter x | true | true |
|
||||
| D.cs:407:55:407:63 | ... != ... | D.cs:407:55:407:55 | access to parameter y | false | true |
|
||||
| D.cs:407:55:407:63 | ... != ... | D.cs:407:55:407:55 | access to parameter y | true | false |
|
||||
| D.cs:409:13:409:21 | ... != ... | D.cs:409:13:409:13 | access to parameter x | false | true |
|
||||
| D.cs:409:13:409:21 | ... != ... | D.cs:409:13:409:13 | access to parameter x | true | false |
|
||||
| D.cs:411:13:411:21 | ... != ... | D.cs:411:13:411:13 | access to parameter y | false | true |
|
||||
| D.cs:411:13:411:21 | ... != ... | D.cs:411:13:411:13 | access to parameter y | true | false |
|
||||
| E.cs:10:34:10:54 | ... != ... | E.cs:10:35:10:45 | ... = ... | false | true |
|
||||
| E.cs:10:34:10:54 | ... != ... | E.cs:10:35:10:45 | ... = ... | true | false |
|
||||
| E.cs:12:32:12:52 | ... != ... | E.cs:12:33:12:43 | ... = ... | false | true |
|
||||
| E.cs:12:32:12:52 | ... != ... | E.cs:12:33:12:43 | ... = ... | true | false |
|
||||
| E.cs:20:19:20:28 | ... == ... | E.cs:20:19:20:20 | access to local variable s1 | false | false |
|
||||
| E.cs:20:19:20:28 | ... == ... | E.cs:20:19:20:20 | access to local variable s1 | true | true |
|
||||
| E.cs:21:13:21:22 | ... == ... | E.cs:21:13:21:14 | access to local variable s2 | false | false |
|
||||
| E.cs:21:13:21:22 | ... == ... | E.cs:21:13:21:14 | access to local variable s2 | true | true |
|
||||
| E.cs:24:19:24:28 | ... == ... | E.cs:24:19:24:20 | access to local variable s1 | false | false |
|
||||
| E.cs:24:19:24:28 | ... == ... | E.cs:24:19:24:20 | access to local variable s1 | true | true |
|
||||
| E.cs:26:13:26:22 | ... != ... | E.cs:26:13:26:14 | access to local variable s2 | false | true |
|
||||
| E.cs:26:13:26:22 | ... != ... | E.cs:26:13:26:14 | access to local variable s2 | true | false |
|
||||
| E.cs:70:22:70:32 | ... == ... | E.cs:70:22:70:24 | access to parameter arr | false | false |
|
||||
| E.cs:70:22:70:32 | ... == ... | E.cs:70:22:70:24 | access to parameter arr | true | true |
|
||||
| E.cs:83:13:83:24 | ... != ... | E.cs:83:13:83:16 | access to parameter vals | false | true |
|
||||
| E.cs:83:13:83:24 | ... != ... | E.cs:83:13:83:16 | access to parameter vals | true | false |
|
||||
| E.cs:85:18:85:29 | ... != ... | E.cs:85:18:85:21 | access to parameter vals | false | true |
|
||||
| E.cs:85:18:85:29 | ... != ... | E.cs:85:18:85:21 | access to parameter vals | true | false |
|
||||
| E.cs:153:13:153:24 | ... != ... | E.cs:153:13:153:16 | access to local variable obj2 | false | true |
|
||||
| E.cs:153:13:153:24 | ... != ... | E.cs:153:13:153:16 | access to local variable obj2 | true | false |
|
||||
| E.cs:164:17:164:25 | ... == ... | E.cs:164:17:164:17 | access to parameter a | false | false |
|
||||
| E.cs:164:17:164:25 | ... == ... | E.cs:164:17:164:17 | access to parameter a | true | true |
|
||||
| E.cs:175:19:175:29 | ... == ... | E.cs:175:19:175:21 | access to parameter obj | false | false |
|
||||
| E.cs:175:19:175:29 | ... == ... | E.cs:175:19:175:21 | access to parameter obj | true | true |
|
||||
| E.cs:176:13:176:22 | ... == ... | E.cs:176:13:176:14 | (...) ... | false | false |
|
||||
| E.cs:176:13:176:22 | ... == ... | E.cs:176:13:176:14 | (...) ... | true | true |
|
||||
| E.cs:180:13:180:23 | ... == ... | E.cs:180:13:180:15 | access to parameter obj | false | false |
|
||||
| E.cs:180:13:180:23 | ... == ... | E.cs:180:13:180:15 | access to parameter obj | true | true |
|
||||
| E.cs:184:13:184:22 | ... == ... | E.cs:184:13:184:14 | (...) ... | false | false |
|
||||
| E.cs:184:13:184:22 | ... == ... | E.cs:184:13:184:14 | (...) ... | true | true |
|
||||
| E.cs:193:17:193:17 | access to parameter o | E.cs:193:17:193:17 | access to parameter o | non-null | false |
|
||||
| E.cs:193:17:193:17 | access to parameter o | E.cs:193:17:193:17 | access to parameter o | null | true |
|
||||
| E.cs:208:13:208:23 | ... is ... | E.cs:208:13:208:13 | access to parameter s | true | false |
|
||||
| E.cs:252:13:252:21 | ... != ... | E.cs:252:13:252:13 | access to parameter i | false | true |
|
||||
| E.cs:252:13:252:21 | ... != ... | E.cs:252:13:252:13 | access to parameter i | true | false |
|
||||
| E.cs:259:13:259:21 | ... == ... | E.cs:259:13:259:13 | access to parameter i | false | false |
|
||||
| E.cs:259:13:259:21 | ... == ... | E.cs:259:13:259:13 | access to parameter i | true | true |
|
||||
| Forwarding.cs:9:14:9:30 | call to method IsNullOrEmpty | Forwarding.cs:9:14:9:14 | access to local variable s | false | false |
|
||||
| Forwarding.cs:14:13:14:32 | call to method IsNotNullOrEmpty | Forwarding.cs:14:13:14:13 | access to local variable s | true | false |
|
||||
| Forwarding.cs:19:14:19:23 | call to method IsNull | Forwarding.cs:19:14:19:14 | access to local variable s | false | false |
|
||||
| Forwarding.cs:19:14:19:23 | call to method IsNull | Forwarding.cs:19:14:19:14 | access to local variable s | true | true |
|
||||
| Forwarding.cs:24:13:24:25 | call to method IsNotNull | Forwarding.cs:24:13:24:13 | access to local variable s | false | true |
|
||||
| Forwarding.cs:24:13:24:25 | call to method IsNotNull | Forwarding.cs:24:13:24:13 | access to local variable s | true | false |
|
||||
| Forwarding.cs:29:13:29:24 | call to method IsNotNull | Forwarding.cs:29:23:29:23 | access to local variable s | true | false |
|
||||
| Forwarding.cs:34:13:34:29 | call to method IsNotNullWrong | Forwarding.cs:34:28:34:28 | access to local variable s | false | false |
|
||||
| Forwarding.cs:45:16:45:26 | ... is ... | Forwarding.cs:45:16:45:16 | access to parameter o | true | false |
|
||||
| Forwarding.cs:45:31:45:61 | call to method IsNullOrEmpty | Forwarding.cs:45:52:45:60 | (...) ... | false | false |
|
||||
| Forwarding.cs:45:66:45:75 | call to method IsNull | Forwarding.cs:45:66:45:66 | access to parameter o | false | false |
|
||||
| Forwarding.cs:45:66:45:75 | call to method IsNull | Forwarding.cs:45:66:45:66 | access to parameter o | true | true |
|
||||
| Forwarding.cs:50:13:50:23 | ... is ... | Forwarding.cs:50:13:50:13 | access to parameter o | true | false |
|
||||
| Forwarding.cs:52:21:52:51 | call to method IsNullOrEmpty | Forwarding.cs:52:42:52:50 | (...) ... | false | false |
|
||||
| Forwarding.cs:59:13:59:21 | ... == ... | Forwarding.cs:59:13:59:13 | access to parameter o | false | false |
|
||||
| Forwarding.cs:59:13:59:21 | ... == ... | Forwarding.cs:59:13:59:13 | access to parameter o | true | true |
|
||||
| Forwarding.cs:68:16:68:38 | call to method IsNullOrEmpty | Forwarding.cs:68:37:68:37 | access to parameter s | false | false |
|
||||
| Forwarding.cs:73:17:73:39 | call to method IsNullOrEmpty | Forwarding.cs:73:38:73:38 | access to parameter s | false | false |
|
||||
| Forwarding.cs:78:16:78:39 | call to method ReferenceEquals | Forwarding.cs:78:32:78:32 | access to parameter o | false | false |
|
||||
| Forwarding.cs:78:16:78:39 | call to method ReferenceEquals | Forwarding.cs:78:32:78:32 | access to parameter o | true | true |
|
||||
| Forwarding.cs:83:16:83:24 | ... != ... | Forwarding.cs:83:16:83:16 | access to parameter o | false | true |
|
||||
| Forwarding.cs:83:16:83:24 | ... != ... | Forwarding.cs:83:16:83:16 | access to parameter o | true | false |
|
||||
| GuardedString.cs:9:14:9:36 | call to method IsNullOrEmpty | GuardedString.cs:9:35:9:35 | access to local variable s | false | false |
|
||||
| GuardedString.cs:14:14:14:41 | call to method IsNullOrWhiteSpace | GuardedString.cs:14:40:14:40 | access to local variable s | false | false |
|
||||
| GuardedString.cs:19:13:19:13 | access to local variable s | GuardedString.cs:19:13:19:13 | access to local variable s | non-null | false |
|
||||
| GuardedString.cs:19:13:19:13 | access to local variable s | GuardedString.cs:19:13:19:13 | access to local variable s | null | true |
|
||||
| GuardedString.cs:19:13:19:26 | ... == ... | GuardedString.cs:19:15:19:21 | access to property Length | true | false |
|
||||
| GuardedString.cs:22:13:22:13 | access to local variable s | GuardedString.cs:22:13:22:13 | access to local variable s | non-null | false |
|
||||
| GuardedString.cs:22:13:22:13 | access to local variable s | GuardedString.cs:22:13:22:13 | access to local variable s | null | true |
|
||||
| GuardedString.cs:22:13:22:25 | ... > ... | GuardedString.cs:22:15:22:21 | access to property Length | true | false |
|
||||
| GuardedString.cs:25:13:25:13 | access to local variable s | GuardedString.cs:25:13:25:13 | access to local variable s | non-null | false |
|
||||
| GuardedString.cs:25:13:25:13 | access to local variable s | GuardedString.cs:25:13:25:13 | access to local variable s | null | true |
|
||||
| GuardedString.cs:25:13:25:26 | ... >= ... | GuardedString.cs:25:15:25:21 | access to property Length | true | false |
|
||||
| GuardedString.cs:28:13:28:13 | access to local variable s | GuardedString.cs:28:13:28:13 | access to local variable s | non-null | false |
|
||||
| GuardedString.cs:28:13:28:13 | access to local variable s | GuardedString.cs:28:13:28:13 | access to local variable s | null | true |
|
||||
| GuardedString.cs:28:13:28:26 | ... < ... | GuardedString.cs:28:15:28:21 | access to property Length | true | false |
|
||||
| GuardedString.cs:31:13:31:13 | access to local variable s | GuardedString.cs:31:13:31:13 | access to local variable s | non-null | false |
|
||||
| GuardedString.cs:31:13:31:13 | access to local variable s | GuardedString.cs:31:13:31:13 | access to local variable s | null | true |
|
||||
| GuardedString.cs:31:13:31:27 | ... <= ... | GuardedString.cs:31:15:31:21 | access to property Length | true | false |
|
||||
| GuardedString.cs:34:13:34:13 | access to local variable s | GuardedString.cs:34:13:34:13 | access to local variable s | non-null | false |
|
||||
| GuardedString.cs:34:13:34:13 | access to local variable s | GuardedString.cs:34:13:34:13 | access to local variable s | null | true |
|
||||
| GuardedString.cs:34:13:34:26 | ... != ... | GuardedString.cs:34:15:34:21 | access to property Length | false | false |
|
||||
| StringConcatenation.cs:15:16:15:22 | ... != ... | StringConcatenation.cs:15:16:15:16 | access to local variable s | false | false |
|
||||
| StringConcatenation.cs:22:16:22:22 | ... != ... | StringConcatenation.cs:22:16:22:16 | access to local variable s | false | false |
|
||||
5
csharp/ql/test/query-tests/Nullness/NullCheck.ql
Normal file
5
csharp/ql/test/query-tests/Nullness/NullCheck.ql
Normal file
@@ -0,0 +1,5 @@
|
||||
import csharp
|
||||
import semmle.code.csharp.controlflow.Guards
|
||||
|
||||
from DereferenceableExpr de, AbstractValue v, boolean isNull
|
||||
select de.getANullCheck(v, isNull), de, v, isNull
|
||||
@@ -1,8 +1,44 @@
|
||||
| A.cs:85:31:85:39 | access to local variable do_maybe1 | Variable $@ may be null here. | A.cs:82:16:82:24 | do_maybe1 | do_maybe1 |
|
||||
| A.cs:92:31:92:38 | access to local variable do_maybe | Variable $@ may be null here. | A.cs:89:16:89:23 | do_maybe | do_maybe |
|
||||
| A.cs:120:31:120:41 | access to local variable while_maybe | Variable $@ may be null here. | A.cs:117:16:117:26 | while_maybe | while_maybe |
|
||||
| A.cs:158:27:158:34 | access to local variable if_maybe | Variable $@ may be null here. | A.cs:153:16:153:23 | if_maybe | if_maybe |
|
||||
| A.cs:180:31:180:39 | access to local variable for_maybe | Variable $@ may be null here. | A.cs:178:21:178:29 | for_maybe | for_maybe |
|
||||
| C.cs:64:9:64:10 | access to local variable o1 | Variable $@ may be null here. | C.cs:62:13:62:14 | o1 | o1 |
|
||||
| C.cs:68:9:68:10 | access to local variable o2 | Variable $@ may be null here. | C.cs:66:13:66:14 | o2 | o2 |
|
||||
| C.cs:96:15:96:15 | access to local variable o | Variable $@ may be null here. | C.cs:95:13:95:13 | o | o |
|
||||
| C.cs:171:13:171:13 | access to local variable s | Variable $@ may be null here. | C.cs:152:13:152:13 | s | s |
|
||||
| C.cs:178:13:178:13 | access to local variable s | Variable $@ may be null here. | C.cs:152:13:152:13 | s | s |
|
||||
| C.cs:204:13:204:13 | access to local variable s | Variable $@ may be null here. | C.cs:186:13:186:13 | s | s |
|
||||
| C.cs:224:9:224:9 | access to local variable s | Variable $@ may be null here. | C.cs:211:13:211:13 | s | s |
|
||||
| C.cs:243:13:243:13 | access to local variable s | Variable $@ may be null here. | C.cs:229:16:229:16 | s | s |
|
||||
| D.cs:60:13:60:14 | access to local variable o4 | Variable $@ may be null here. | D.cs:54:13:54:14 | o4 | o4 |
|
||||
| D.cs:62:13:62:14 | access to local variable o5 | Variable $@ may be null here. | D.cs:58:13:58:14 | o5 | o5 |
|
||||
| D.cs:73:13:73:14 | access to local variable o7 | Variable $@ may be null here. | D.cs:68:13:68:14 | o7 | o7 |
|
||||
| D.cs:78:13:78:14 | access to local variable o8 | Variable $@ may be null here. | D.cs:75:13:75:14 | o8 | o8 |
|
||||
| D.cs:80:13:80:14 | access to local variable o8 | Variable $@ may be null here. | D.cs:75:13:75:14 | o8 | o8 |
|
||||
| D.cs:82:13:82:14 | access to local variable o8 | Variable $@ may be null here. | D.cs:75:13:75:14 | o8 | o8 |
|
||||
| D.cs:84:13:84:14 | access to local variable o8 | Variable $@ may be null here. | D.cs:75:13:75:14 | o8 | o8 |
|
||||
| D.cs:91:13:91:14 | access to local variable xs | Variable $@ may be null here. | D.cs:89:15:89:16 | xs | xs |
|
||||
| D.cs:94:21:94:22 | access to local variable xs | Variable $@ may be null here. | D.cs:89:15:89:16 | xs | xs |
|
||||
| D.cs:98:21:98:22 | access to local variable xs | Variable $@ may be null here. | D.cs:89:15:89:16 | xs | xs |
|
||||
| D.cs:105:19:105:20 | access to local variable xs | Variable $@ may be null here. | D.cs:89:15:89:16 | xs | xs |
|
||||
| D.cs:171:9:171:11 | access to local variable obj | Variable $@ may be null here. | D.cs:163:16:163:18 | obj | obj |
|
||||
| D.cs:245:13:245:13 | access to local variable o | Variable $@ may be null here. | D.cs:228:16:228:16 | o | o |
|
||||
| D.cs:247:13:247:13 | access to local variable o | Variable $@ may be null here. | D.cs:228:16:228:16 | o | o |
|
||||
| D.cs:253:13:253:14 | access to local variable o2 | Variable $@ may be null here. | D.cs:249:13:249:14 | o2 | o2 |
|
||||
| D.cs:267:13:267:13 | access to local variable o | Variable $@ may be null here. | D.cs:258:16:258:16 | o | o |
|
||||
| D.cs:291:13:291:13 | access to local variable o | Variable $@ may be null here. | D.cs:258:16:258:16 | o | o |
|
||||
| D.cs:294:13:294:13 | access to local variable o | Variable $@ may be null here. | D.cs:258:16:258:16 | o | o |
|
||||
| D.cs:300:17:300:20 | access to local variable prev | Variable $@ may be null here. | D.cs:296:16:296:19 | prev | prev |
|
||||
| D.cs:313:17:313:17 | access to local variable s | Variable $@ may be null here. | D.cs:304:16:304:16 | s | s |
|
||||
| D.cs:324:9:324:9 | access to local variable r | Variable $@ may be null here. | D.cs:316:16:316:16 | r | r |
|
||||
| D.cs:356:13:356:13 | access to local variable a | Variable $@ may be null here. | D.cs:351:15:351:15 | a | a |
|
||||
| D.cs:363:13:363:16 | access to local variable last | Variable $@ may be null here. | D.cs:360:20:360:23 | last | last |
|
||||
| D.cs:372:13:372:13 | access to local variable b | Variable $@ may be null here. | D.cs:366:15:366:15 | b | b |
|
||||
| E.cs:12:38:12:39 | access to local variable a2 | Variable $@ may be null here. | E.cs:9:18:9:19 | a2 | a2 |
|
||||
| E.cs:14:13:14:14 | access to local variable a3 | Variable $@ may be null here. | E.cs:11:16:11:17 | a3 | a3 |
|
||||
| E.cs:27:13:27:14 | access to local variable s1 | Variable $@ may be null here. | E.cs:19:13:19:14 | s1 | s1 |
|
||||
| E.cs:35:9:35:12 | access to local variable last | Variable $@ may be null here. | E.cs:32:16:32:19 | last | last |
|
||||
| E.cs:43:13:43:16 | access to local variable last | Variable $@ may be null here. | E.cs:32:16:32:19 | last | last |
|
||||
| E.cs:61:13:61:17 | access to local variable slice | Variable $@ may be null here. | E.cs:51:22:51:26 | slice | slice |
|
||||
| E.cs:112:13:112:16 | access to local variable arr2 | Variable $@ may be null here. | E.cs:107:15:107:18 | arr2 | arr2 |
|
||||
| E.cs:125:33:125:35 | access to local variable obj | Variable $@ may be null here. | E.cs:119:13:119:15 | obj | obj |
|
||||
| E.cs:218:9:218:9 | access to local variable x | Variable $@ may be null here. | E.cs:215:13:215:13 | x | x |
|
||||
| Forwarding.cs:36:31:36:31 | access to local variable s | Variable $@ may be null here. | Forwarding.cs:7:16:7:16 | s | s |
|
||||
| Forwarding.cs:40:27:40:27 | access to local variable s | Variable $@ may be null here. | Forwarding.cs:7:16:7:16 | s | s |
|
||||
| GuardedString.cs:35:31:35:31 | access to local variable s | Variable $@ may be null here. | GuardedString.cs:7:16:7:16 | s | s |
|
||||
|
||||
@@ -6,14 +6,14 @@ class StringsTest
|
||||
{
|
||||
string s = null;
|
||||
s += "abc";
|
||||
s = s.Trim(); // OK
|
||||
s = s.Trim(); // GOOD
|
||||
}
|
||||
|
||||
void StringMaybeNull()
|
||||
{
|
||||
string s = null;
|
||||
while (s != "")
|
||||
s = s.Trim(); // Maybe null
|
||||
s = s.Trim(); // BAD (maybe)
|
||||
}
|
||||
|
||||
void StringNotNull()
|
||||
@@ -21,13 +21,13 @@ class StringsTest
|
||||
string s = null;
|
||||
while (s != "")
|
||||
s += "abc";
|
||||
s = s.Trim(); // OK (s == "")
|
||||
s = s.Trim(); // GOOD
|
||||
}
|
||||
|
||||
void StringNotAssignedNull()
|
||||
{
|
||||
string s = "abc";
|
||||
s += null;
|
||||
s = s.Trim(); // OK
|
||||
s = s.Trim(); // GOOD
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user