mirror of
https://github.com/github/codeql.git
synced 2026-04-28 02:05:14 +02:00
C#: Fix loop that iterates only once
This commit is contained in:
@@ -56,17 +56,19 @@ namespace Semmle.Extraction.PDB
|
||||
|
||||
public static MetadataPdbReader? CreateFromAssembly(string assemblyPath, PEReader peReader)
|
||||
{
|
||||
foreach (var provider in peReader.
|
||||
ReadDebugDirectory().
|
||||
Where(d => d.Type == DebugDirectoryEntryType.EmbeddedPortablePdb).
|
||||
Select(dirEntry => peReader.ReadEmbeddedPortablePdbDebugDirectoryData(dirEntry)))
|
||||
var provider = peReader
|
||||
.ReadDebugDirectory()
|
||||
.Where(d => d.Type == DebugDirectoryEntryType.EmbeddedPortablePdb)
|
||||
.Select(dirEntry => peReader.ReadEmbeddedPortablePdbDebugDirectoryData(dirEntry))
|
||||
.FirstOrDefault();
|
||||
|
||||
if (provider is object)
|
||||
{
|
||||
return new MetadataPdbReader(provider);
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
MetadataReaderProvider provider;
|
||||
string pdbPath;
|
||||
if (peReader.TryOpenAssociatedPortablePdb(assemblyPath, s => new FileStream(s, FileMode.Open, FileAccess.Read, FileShare.Read), out provider, out pdbPath))
|
||||
{
|
||||
|
||||
@@ -96,11 +96,13 @@ namespace Semmle.Extraction.PDB
|
||||
|
||||
var debugDirectory = peReader.ReadDebugDirectory();
|
||||
|
||||
foreach (var path in debugDirectory.
|
||||
Where(d => d.Type == DebugDirectoryEntryType.CodeView).
|
||||
Select(peReader.ReadCodeViewDebugDirectoryData).
|
||||
Select(cv => cv.Path).
|
||||
Where(path => File.Exists(path)))
|
||||
var path = debugDirectory
|
||||
.Where(d => d.Type == DebugDirectoryEntryType.CodeView)
|
||||
.Select(peReader.ReadCodeViewDebugDirectoryData)
|
||||
.Select(cv => cv.Path)
|
||||
.FirstOrDefault(File.Exists);
|
||||
|
||||
if (path is object)
|
||||
{
|
||||
return new NativePdbReader(path);
|
||||
}
|
||||
|
||||
@@ -27,8 +27,12 @@ namespace Semmle.Extraction.CSharp.Standalone
|
||||
: new[] { "/usr/share/dotnet", @"C:\Program Files\dotnet" };
|
||||
var coreDirs = dotnetDirs.Select(d => Path.Combine(d, "shared", "Microsoft.NETCore.App"));
|
||||
|
||||
foreach (var dir in coreDirs.Where(Directory.Exists))
|
||||
var dir = coreDirs.FirstOrDefault(Directory.Exists);
|
||||
if (dir is object)
|
||||
{
|
||||
return Directory.EnumerateDirectories(dir).OrderByDescending(Path.GetFileName);
|
||||
}
|
||||
|
||||
return Enumerable.Empty<string>();
|
||||
}
|
||||
}
|
||||
@@ -48,15 +52,17 @@ namespace Semmle.Extraction.CSharp.Standalone
|
||||
|
||||
if (Directory.Exists(@"C:\Windows\Microsoft.NET\Framework64"))
|
||||
{
|
||||
return Directory.EnumerateDirectories(@"C:\Windows\Microsoft.NET\Framework64", "v*").
|
||||
OrderByDescending(Path.GetFileName);
|
||||
return Directory.EnumerateDirectories(@"C:\Windows\Microsoft.NET\Framework64", "v*")
|
||||
.OrderByDescending(Path.GetFileName);
|
||||
}
|
||||
|
||||
foreach (var dir in monoDirs.Where(Directory.Exists))
|
||||
var dir = monoDirs.FirstOrDefault(Directory.Exists);
|
||||
|
||||
if (dir is object)
|
||||
{
|
||||
return Directory.EnumerateDirectories(dir).
|
||||
Where(d => Char.IsDigit(Path.GetFileName(d)[0])).
|
||||
OrderByDescending(Path.GetFileName);
|
||||
return Directory.EnumerateDirectories(dir)
|
||||
.Where(d => Char.IsDigit(Path.GetFileName(d)[0]))
|
||||
.OrderByDescending(Path.GetFileName);
|
||||
}
|
||||
|
||||
return Enumerable.Empty<string>();
|
||||
|
||||
@@ -256,25 +256,23 @@ namespace Semmle.Extraction.CSharp
|
||||
}
|
||||
else
|
||||
{
|
||||
bool referenceFound = false;
|
||||
var composed = referencePaths.Value
|
||||
.Select(path => Path.Combine(path, clref.Reference))
|
||||
.Where(path => File.Exists(path))
|
||||
.Select(path => canonicalPathCache.GetCanonicalPath(path))
|
||||
.FirstOrDefault();
|
||||
|
||||
if (composed is object)
|
||||
{
|
||||
foreach (var composed in referencePaths.Value.
|
||||
Select(path => Path.Combine(path, clref.Reference)).
|
||||
Where(path => File.Exists(path)).
|
||||
Select(path => canonicalPathCache.GetCanonicalPath(path)))
|
||||
var reference = MakeReference(clref, composed);
|
||||
ret.Add(reference);
|
||||
}
|
||||
else
|
||||
{
|
||||
lock (analyser)
|
||||
{
|
||||
referenceFound = true;
|
||||
var reference = MakeReference(clref, composed);
|
||||
ret.Add(reference);
|
||||
break;
|
||||
}
|
||||
if (!referenceFound)
|
||||
{
|
||||
lock (analyser)
|
||||
{
|
||||
analyser.Logger.Log(Severity.Error, " Unable to resolve reference '{0}'", clref.Reference);
|
||||
++analyser.CompilationErrors;
|
||||
}
|
||||
analyser.Logger.Log(Severity.Error, " Unable to resolve reference '{0}'", clref.Reference);
|
||||
++analyser.CompilationErrors;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user