Skip to content

Commit b63ab2a

Browse files
authored
Escape curly braces in file names when logging (#1000)
Escape curly braces in file names when logging
1 parent ff76158 commit b63ab2a

File tree

5 files changed

+32
-5
lines changed

5 files changed

+32
-5
lines changed

src/coverlet.core/Coverage.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -107,7 +107,7 @@ public CoveragePrepareResult PrepareModules()
107107

108108
Array.ForEach(_excludeFilters ?? Array.Empty<string>(), filter => _logger.LogVerbose($"Excluded module filter '{filter}'"));
109109
Array.ForEach(_includeFilters ?? Array.Empty<string>(), filter => _logger.LogVerbose($"Included module filter '{filter}'"));
110-
Array.ForEach(_excludedSourceFiles ?? Array.Empty<string>(), filter => _logger.LogVerbose($"Excluded source files filter '{filter}'"));
110+
Array.ForEach(_excludedSourceFiles ?? Array.Empty<string>(), filter => _logger.LogVerbose($"Excluded source files filter '{FileSystem.EscapeFileName(filter)}'"));
111111

112112
_excludeFilters = _excludeFilters?.Where(f => _instrumentationHelper.IsValidFilterExpression(f)).ToArray();
113113
_includeFilters = _includeFilters?.Where(f => _instrumentationHelper.IsValidFilterExpression(f)).ToArray();

src/coverlet.core/Helpers/FileSystem.cs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,5 +53,11 @@ public string[] ReadAllLines(string path)
5353
{
5454
return File.ReadAllLines(path);
5555
}
56+
57+
// Escape format characters in file names
58+
internal static string EscapeFileName(string fileName)
59+
{
60+
return fileName?.Replace("{", "{{").Replace("}", "}}");
61+
}
5662
}
5763
}

src/coverlet.core/Helpers/SourceRootTranslator.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -98,7 +98,7 @@ public string ResolveFilePath(string originalFileName)
9898
if (_fileSystem.Exists(pathToCheck = Path.GetFullPath(originalFileName.Replace(mapping.Key, srm.OriginalPath))))
9999
{
100100
(_resolutionCacheFiles ??= new Dictionary<string, string>()).Add(originalFileName, pathToCheck);
101-
_logger.LogVerbose($"Mapping resolved: '{originalFileName}' -> '{pathToCheck}'");
101+
_logger.LogVerbose($"Mapping resolved: '{FileSystem.EscapeFileName(originalFileName)}' -> '{FileSystem.EscapeFileName(pathToCheck)}'");
102102
return pathToCheck;
103103
}
104104
}

src/coverlet.core/Instrumentation/Instrumenter.cs

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
using Coverlet.Core.Instrumentation.Reachability;
1010
using Coverlet.Core.Abstractions;
1111
using Coverlet.Core.Attributes;
12+
using Coverlet.Core.Helpers;
1213
using Coverlet.Core.Symbols;
1314
using Microsoft.Extensions.FileSystemGlobbing;
1415
using Mono.Cecil;
@@ -110,7 +111,7 @@ public bool CanInstrument()
110111
}
111112
else
112113
{
113-
_logger.LogVerbose($"Unable to instrument module: {_module}, embedded pdb without local source files, [{firstNotFoundDocument}]");
114+
_logger.LogVerbose($"Unable to instrument module: {_module}, embedded pdb without local source files, [{FileSystem.EscapeFileName(firstNotFoundDocument)}]");
114115
return false;
115116
}
116117
}
@@ -122,7 +123,7 @@ public bool CanInstrument()
122123
}
123124
else
124125
{
125-
_logger.LogVerbose($"Unable to instrument module: {_module}, pdb without local source files, [{firstNotFoundDocument}]");
126+
_logger.LogVerbose($"Unable to instrument module: {_module}, pdb without local source files, [{FileSystem.EscapeFileName(firstNotFoundDocument)}]");
126127
return false;
127128
}
128129
}
@@ -159,7 +160,7 @@ public InstrumenterResult Instrument()
159160
{
160161
foreach (string sourceFile in _excludedSourceFiles)
161162
{
162-
_logger.LogVerbose($"Excluded source file: '{sourceFile}'");
163+
_logger.LogVerbose($"Excluded source file: '{FileSystem.EscapeFileName(sourceFile)}'");
163164
}
164165
}
165166

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
using Coverlet.Core.Helpers;
2+
using Xunit;
3+
4+
namespace Coverlet.Core.Helpers.Tests
5+
{
6+
public class FileSystemTests
7+
{
8+
[Theory]
9+
[InlineData(null, null)]
10+
[InlineData("", "")]
11+
[InlineData("filename.cs", "filename.cs")]
12+
[InlineData("filename{T}.cs", "filename{{T}}.cs")]
13+
public void TestEscapeFileName(string fileName, string expected)
14+
{
15+
var actual = FileSystem.EscapeFileName(fileName);
16+
17+
Assert.Equal(expected, actual);
18+
}
19+
}
20+
}

0 commit comments

Comments
 (0)