mirror of
https://github.com/github/codeql.git
synced 2025-12-17 17:23:36 +01:00
179 lines
6.0 KiB
Plaintext
179 lines
6.0 KiB
Plaintext
// Generate DataFlow.dll: `csc /o /target:library DataFlow.cs_ /out:DataFlow.dll`
|
|
|
|
using System;
|
|
|
|
namespace Dataflow
|
|
{
|
|
public class NullMethods
|
|
{
|
|
public object ReturnsNull() => null;
|
|
|
|
public object ReturnsNull2()
|
|
{
|
|
var x = ReturnsNull();
|
|
return x;
|
|
}
|
|
|
|
// Does not necessarily return null because of virtual method call.
|
|
public object NotReturnsNull() => VirtualReturnsNull();
|
|
|
|
public object ReturnsNullIndirect() => ReturnsNull();
|
|
|
|
public virtual object VirtualReturnsNull() => null;
|
|
|
|
public object NullProperty { get => null; }
|
|
|
|
public virtual object VirtualNullProperty { get => null; }
|
|
}
|
|
|
|
public class NonNullMethods
|
|
{
|
|
public object ReturnsNonNull() => new object();
|
|
|
|
public object ReturnsNonNull2()
|
|
{
|
|
var x = ReturnsNonNull();
|
|
return x;
|
|
}
|
|
|
|
public object ReturnsNonNullIndirect() => ReturnsNonNull();
|
|
|
|
public object NonNullProperty { get => 1; }
|
|
|
|
public string NonNullProperty2 { get => "not null"; }
|
|
|
|
public virtual object VirtualNonNull { get => "not null"; }
|
|
|
|
public bool cond = false;
|
|
|
|
public string MaybeNull()
|
|
{
|
|
if (cond)
|
|
return null;
|
|
else
|
|
return "not null";
|
|
}
|
|
|
|
public string MaybeNull2()
|
|
{
|
|
return cond ? null : "not null";
|
|
}
|
|
|
|
public virtual object VirtualNonNullProperty { get => "non null"; }
|
|
}
|
|
|
|
public class ThrowingMethods
|
|
{
|
|
public static object AlwaysThrows() => throw new InvalidOperationException();
|
|
|
|
public object AlwaysThrowsIndirect() => AlwaysThrows();
|
|
|
|
public virtual object VirtualThrows() => throw new Exception();
|
|
|
|
public object ThrowProperty { get => throw new Exception(); }
|
|
public virtual object VirtualThrowProperty { get => throw new Exception(); }
|
|
|
|
}
|
|
|
|
public class DataFlow
|
|
{
|
|
public object Taint1(object x) => x;
|
|
|
|
public object Taint2(object x) => Taint5(x);
|
|
|
|
public string Taint3(string s)
|
|
{
|
|
var x = s;
|
|
Console.WriteLine(s);
|
|
return x;
|
|
}
|
|
|
|
public object Taint5(object x) => Taint6(x);
|
|
|
|
private object Taint6(object x) => x;
|
|
}
|
|
|
|
public class TaintFlow
|
|
{
|
|
public string Taint1(string a, string b) => a + b;
|
|
|
|
public int Taint2(int a, int b) => a + b;
|
|
|
|
public int Taint3(int a) => -a;
|
|
|
|
public string TaintIndirect(string a, string b) => Taint1(a, b);
|
|
}
|
|
|
|
public class Properties
|
|
{
|
|
public int TrivialProperty1 { get; set; }
|
|
|
|
int field;
|
|
|
|
public int TrivialProperty2
|
|
{
|
|
get => field;
|
|
set { field = value; }
|
|
}
|
|
}
|
|
|
|
public class ThisAssemblyIsNotAStub
|
|
{
|
|
public void F()
|
|
{
|
|
// Ensure that the assembly isn't tagged as a stub
|
|
// Need to bump the average instruction count.
|
|
Console.WriteLine("This is not a stub assembly");
|
|
Console.WriteLine("This is not a stub assembly");
|
|
Console.WriteLine("This is not a stub assembly");
|
|
Console.WriteLine("This is not a stub assembly");
|
|
Console.WriteLine("This is not a stub assembly");
|
|
Console.WriteLine("This is not a stub assembly");
|
|
Console.WriteLine("This is not a stub assembly");
|
|
Console.WriteLine("This is not a stub assembly");
|
|
Console.WriteLine("This is not a stub assembly");
|
|
Console.WriteLine("This is not a stub assembly");
|
|
Console.WriteLine("This is not a stub assembly");
|
|
Console.WriteLine("This is not a stub assembly");
|
|
Console.WriteLine("This is not a stub assembly");
|
|
Console.WriteLine("This is not a stub assembly");
|
|
Console.WriteLine("This is not a stub assembly");
|
|
Console.WriteLine("This is not a stub assembly");
|
|
Console.WriteLine("This is not a stub assembly");
|
|
Console.WriteLine("This is not a stub assembly");
|
|
Console.WriteLine("This is not a stub assembly");
|
|
Console.WriteLine("This is not a stub assembly");
|
|
Console.WriteLine("This is not a stub assembly");
|
|
Console.WriteLine("This is not a stub assembly");
|
|
Console.WriteLine("This is not a stub assembly");
|
|
Console.WriteLine("This is not a stub assembly");
|
|
Console.WriteLine("This is not a stub assembly");
|
|
Console.WriteLine("This is not a stub assembly");
|
|
Console.WriteLine("This is not a stub assembly");
|
|
Console.WriteLine("This is not a stub assembly");
|
|
Console.WriteLine("This is not a stub assembly");
|
|
Console.WriteLine("This is not a stub assembly");
|
|
Console.WriteLine("This is not a stub assembly");
|
|
Console.WriteLine("This is not a stub assembly");
|
|
Console.WriteLine("This is not a stub assembly");
|
|
Console.WriteLine("This is not a stub assembly");
|
|
Console.WriteLine("This is not a stub assembly");
|
|
Console.WriteLine("This is not a stub assembly");
|
|
Console.WriteLine("This is not a stub assembly");
|
|
Console.WriteLine("This is not a stub assembly");
|
|
Console.WriteLine("This is not a stub assembly");
|
|
Console.WriteLine("This is not a stub assembly");
|
|
Console.WriteLine("This is not a stub assembly");
|
|
Console.WriteLine("This is not a stub assembly");
|
|
Console.WriteLine("This is not a stub assembly");
|
|
Console.WriteLine("This is not a stub assembly");
|
|
Console.WriteLine("This is not a stub assembly");
|
|
Console.WriteLine("This is not a stub assembly");
|
|
Console.WriteLine("This is not a stub assembly");
|
|
Console.WriteLine("This is not a stub assembly");
|
|
Console.WriteLine("This is not a stub assembly");
|
|
Console.WriteLine("This is not a stub assembly");
|
|
}
|
|
}
|
|
}
|