public void SystemProcessUnsafeConcatinationAnalyserReportsNothingIfArgumentsIsMethodCall() { string code = @" using System; public class TestClass { public void TestMethod() { System.Diagnostics.Process.Start(""CMD.exe"", this.GetArguments()); } private string GetArguments() { return ""echo hello""; } } "; CompilationUnitSyntax root = CSharpSyntaxTree.ParseText(code).GetCompilationUnitRoot(); SystemProcessUnsafeConcatinationAnalyser analyser = new SystemProcessUnsafeConcatinationAnalyser(); analyser.Visit(root); IReadOnlyCollection <AnalyserItem> result = analyser.AnalyserItems; Assert.Empty(result); }
public void SystemProcessUnsafeConcatinationAnalyserReportsIfArgumentsVariableIsNotSafelyConcatenatedWithMethodCall() { string code = @" using System; public class TestClass { public void TestMethod() { string arguments = ""echo Hello"" + this.GetString(); System.Diagnostics.Process.Start(""CMD.exe"", arguments); } private string GetString() { return "" World""; } } "; CompilationUnitSyntax root = CSharpSyntaxTree.ParseText(code).GetCompilationUnitRoot(); SystemProcessUnsafeConcatinationAnalyser analyser = new SystemProcessUnsafeConcatinationAnalyser(); analyser.Visit(root); IReadOnlyCollection <AnalyserItem> result = analyser.AnalyserItems; Assert.NotEmpty(result); Assert.Equal(1, result.Count); Assert.Equal("Concatinated process start arguments are unsafe", result.Last().Message); Assert.Equal(8, result.Last().NodeReference.GetSyntax().GetLocation().GetMappedLineSpan().StartLinePosition.Line); }
public void SystemProcessUnsafeConcatinationAnalyserReportsNothingIfArgumentsVariableIsParameter() { string code = @" using System; public class TestClass { public void TestMethod(string arguments) { System.Diagnostics.Process.Start(""CMD.exe"", arguments); } } "; CompilationUnitSyntax root = CSharpSyntaxTree.ParseText(code).GetCompilationUnitRoot(); SystemProcessUnsafeConcatinationAnalyser analyser = new SystemProcessUnsafeConcatinationAnalyser(); analyser.Visit(root); IReadOnlyCollection <AnalyserItem> result = analyser.AnalyserItems; Assert.Empty(result); }