Browse Source

Fix #2481: Remove 4 characters length requirement in regex search.

pull/2489/head
Siegfried Pammer 4 years ago
parent
commit
dd1621a811
  1. 28
      ILSpy/Search/AbstractSearchStrategy.cs

28
ILSpy/Search/AbstractSearchStrategy.cs

@ -25,14 +25,10 @@ namespace ICSharpCode.ILSpy.Search @@ -25,14 +25,10 @@ namespace ICSharpCode.ILSpy.Search
if (terms.Length == 1 && terms[0].Length > 2)
{
string search = terms[0];
if (search.StartsWith("/", StringComparison.Ordinal) && search.Length > 4)
if (TryParseRegex(search, out regex))
{
var regexString = search.Substring(1, search.Length - 1);
fullNameSearch = search.Contains("\\.");
omitGenerics = !search.Contains("<");
if (regexString.EndsWith("/", StringComparison.Ordinal))
regexString = regexString.Substring(0, regexString.Length - 1);
regex = SafeNewRegex(regexString);
}
else
{
@ -129,7 +125,26 @@ namespace ICSharpCode.ILSpy.Search @@ -129,7 +125,26 @@ namespace ICSharpCode.ILSpy.Search
resultQueue.TryAdd(result);
}
Regex SafeNewRegex(string unsafePattern)
bool TryParseRegex(string input, out Regex pattern)
{
pattern = null;
if (!input.StartsWith("/", StringComparison.Ordinal))
{
return false;
}
input = input.Substring(1);
if (input.EndsWith("/", StringComparison.Ordinal))
{
input = input.Remove(input.Length - 1);
}
if (string.IsNullOrWhiteSpace(input))
{
return false;
}
pattern = SafeNewRegex(input);
return pattern != null;
static Regex SafeNewRegex(string unsafePattern)
{
try
{
@ -142,3 +157,4 @@ namespace ICSharpCode.ILSpy.Search @@ -142,3 +157,4 @@ namespace ICSharpCode.ILSpy.Search
}
}
}
}

Loading…
Cancel
Save