mirror of
https://github.com/github/codeql.git
synced 2025-12-17 01:03:14 +01:00
C#: Handle dotnet exec csc.dll compiler calls on Windows
This commit is contained in:
@@ -1,3 +1,7 @@
|
|||||||
|
using System;
|
||||||
|
using System.Text.RegularExpressions;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
|
||||||
namespace Semmle.Extraction.CSharp
|
namespace Semmle.Extraction.CSharp
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@@ -9,6 +13,31 @@ namespace Semmle.Extraction.CSharp
|
|||||||
{
|
{
|
||||||
Extractor.SetInvariantCulture();
|
Extractor.SetInvariantCulture();
|
||||||
|
|
||||||
|
Console.WriteLine($"Semmle.Extraction.CSharp.Driver: called with {string.Join(", ", args)}");
|
||||||
|
|
||||||
|
if (args.Length > 0 && args[0] == "--dotnetexec")
|
||||||
|
{
|
||||||
|
var compilerRegEx = new Regex(@"csc\.exe|mcs\.exe|csc\.dll", RegexOptions.Compiled);
|
||||||
|
var cil = args.Length > 1 && args[1] == "--cil";
|
||||||
|
for (var i = cil ? 2 : 1; i < args.Length; i++)
|
||||||
|
{
|
||||||
|
if (compilerRegEx.IsMatch(args[i]))
|
||||||
|
{
|
||||||
|
var argsList = new List<string>();
|
||||||
|
if (cil)
|
||||||
|
argsList.Add("--cil");
|
||||||
|
argsList.Add("--compiler");
|
||||||
|
argsList.Add(args[i]);
|
||||||
|
if (i + 1 < args.Length)
|
||||||
|
argsList.AddRange(args[(i + 1)..]);
|
||||||
|
return (int)Extractor.Run(argsList.ToArray());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Console.WriteLine($"Semmle.Extraction.CSharp.Driver: not a compiler invocation");
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
return (int)Extractor.Run(args);
|
return (int)Extractor.Run(args);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,7 +6,9 @@
|
|||||||
prepend --cil
|
prepend --cil
|
||||||
**/mono*:
|
**/mono*:
|
||||||
**/dotnet:
|
**/dotnet:
|
||||||
invoke ${config_dir}/extract-csharp.sh
|
invoke ${config_dir}/Semmle.Extraction.CSharp.Driver
|
||||||
|
prepend --dotnetexec
|
||||||
|
prepend --cil
|
||||||
**/msbuild:
|
**/msbuild:
|
||||||
**/xbuild:
|
**/xbuild:
|
||||||
replace yes
|
replace yes
|
||||||
|
|||||||
@@ -1,16 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
echo extract-csharp.sh: Called with arguments: "$@"
|
|
||||||
|
|
||||||
extractor="$CODEQL_EXTRACTOR_CSHARP_ROOT/tools/$CODEQL_PLATFORM/Semmle.Extraction.CSharp.Driver"
|
|
||||||
|
|
||||||
for i in "$@"
|
|
||||||
do
|
|
||||||
shift
|
|
||||||
if [[ `basename -- "$i"` =~ csc.exe|mcs.exe|csc.dll ]]
|
|
||||||
then
|
|
||||||
echo extract-csharp.sh: exec $extractor --cil $@
|
|
||||||
exec "$extractor" --compiler $i --cil $@
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
|
|
||||||
echo extract-csharp.sh: Not a compiler invocation
|
|
||||||
@@ -6,7 +6,9 @@
|
|||||||
prepend --cil
|
prepend --cil
|
||||||
**/mono*:
|
**/mono*:
|
||||||
**/dotnet:
|
**/dotnet:
|
||||||
invoke ${config_dir}/extract-csharp.sh
|
invoke ${config_dir}/Semmle.Extraction.CSharp.Driver
|
||||||
|
prepend --dotnetexec
|
||||||
|
prepend --cil
|
||||||
**/msbuild:
|
**/msbuild:
|
||||||
**/xbuild:
|
**/xbuild:
|
||||||
replace yes
|
replace yes
|
||||||
|
|||||||
@@ -1,16 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
echo extract-csharp.sh: Called with arguments: "$@"
|
|
||||||
|
|
||||||
extractor="$CODEQL_EXTRACTOR_CSHARP_ROOT/tools/$CODEQL_PLATFORM/Semmle.Extraction.CSharp.Driver"
|
|
||||||
|
|
||||||
for i in "$@"
|
|
||||||
do
|
|
||||||
shift
|
|
||||||
if [[ `basename -- "$i"` =~ csc.exe|mcs.exe|csc.dll ]]
|
|
||||||
then
|
|
||||||
echo extract-csharp.sh: exec $extractor --cil $@
|
|
||||||
exec "$extractor" --compiler $i --cil $@
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
|
|
||||||
echo extract-csharp.sh: Not a compiler invocation
|
|
||||||
@@ -7,3 +7,7 @@
|
|||||||
prepend --compiler
|
prepend --compiler
|
||||||
prepend "${compiler}"
|
prepend "${compiler}"
|
||||||
prepend --cil
|
prepend --cil
|
||||||
|
**\dotnet.exe:
|
||||||
|
invoke ${config_dir}\Semmle.Extraction.CSharp.Driver.exe
|
||||||
|
prepend --dotnetexec
|
||||||
|
prepend --cil
|
||||||
|
|||||||
Reference in New Issue
Block a user