diff --git a/src/WireMock.Net/Authentication/AzureADAuthenticationMatcher.cs b/src/WireMock.Net/Authentication/AzureADAuthenticationMatcher.cs
index 4832fe7f..50aa507a 100644
--- a/src/WireMock.Net/Authentication/AzureADAuthenticationMatcher.cs
+++ b/src/WireMock.Net/Authentication/AzureADAuthenticationMatcher.cs
@@ -10,6 +10,7 @@ using Microsoft.IdentityModel.Protocols;
using Microsoft.IdentityModel.Protocols.OpenIdConnect;
using Microsoft.IdentityModel.Tokens;
using Stef.Validation;
+using WireMock.Constants;
using WireMock.Matchers;
using WireMock.Models;
@@ -50,7 +51,7 @@ internal class AzureADAuthenticationMatcher : IStringMatcher
return MatchScores.Mismatch;
}
- var token = Regex.Replace(input, BearerPrefix, string.Empty, RegexOptions.IgnoreCase);
+ var token = Regex.Replace(input, BearerPrefix, string.Empty, RegexOptions.IgnoreCase, WireMockConstants.DefaultRegexTimeout);
try
{
diff --git a/src/WireMock.Net/Authentication/BasicAuthenticationMatcher.cs b/src/WireMock.Net/Authentication/BasicAuthenticationMatcher.cs
index c2b5aa0f..e078d423 100644
--- a/src/WireMock.Net/Authentication/BasicAuthenticationMatcher.cs
+++ b/src/WireMock.Net/Authentication/BasicAuthenticationMatcher.cs
@@ -6,12 +6,9 @@ using WireMock.Matchers;
namespace WireMock.Authentication;
-internal class BasicAuthenticationMatcher : RegexMatcher
+internal class BasicAuthenticationMatcher(string username, string password)
+ : RegexMatcher(BuildPattern(username, password))
{
- public BasicAuthenticationMatcher(string username, string password) : base(BuildPattern(username, password))
- {
- }
-
public override string Name => nameof(BasicAuthenticationMatcher);
private static string BuildPattern(string username, string password)
diff --git a/src/WireMock.Net/Compatibility/StringExtensions.cs b/src/WireMock.Net/Compatibility/StringExtensions.cs
index 4b42e4d3..d95c2bc2 100644
--- a/src/WireMock.Net/Compatibility/StringExtensions.cs
+++ b/src/WireMock.Net/Compatibility/StringExtensions.cs
@@ -2,6 +2,7 @@
#if NET451 || NET452 || NET46 || NET451 || NET461 || NETSTANDARD1_3 || NETSTANDARD2_0
using System.Text.RegularExpressions;
+using WireMock.Constants;
// ReSharper disable once CheckNamespace
namespace System;
@@ -11,7 +12,7 @@ internal static class StringExtensions
public static string Replace(this string text, string oldValue, string newValue, StringComparison stringComparison)
{
var options = stringComparison == StringComparison.OrdinalIgnoreCase ? RegexOptions.IgnoreCase : RegexOptions.None;
- return Regex.Replace(text, oldValue, newValue, options);
+ return Regex.Replace(text, oldValue, newValue, options, WireMockConstants.DefaultRegexTimeout);
}
}
#endif
\ No newline at end of file
diff --git a/src/WireMock.Net/Constants/WireMockConstants.cs b/src/WireMock.Net/Constants/WireMockConstants.cs
index 9dea909a..126a57aa 100644
--- a/src/WireMock.Net/Constants/WireMockConstants.cs
+++ b/src/WireMock.Net/Constants/WireMockConstants.cs
@@ -1,15 +1,19 @@
// Copyright © WireMock.Net
+using System;
+
namespace WireMock.Constants;
internal static class WireMockConstants
{
- public const int AdminPriority = int.MinValue;
- public const int MinPriority = -1_000_000;
- public const int ProxyPriority = -2_000_000;
+ internal static readonly TimeSpan DefaultRegexTimeout = TimeSpan.FromSeconds(10);
+
+ internal const int AdminPriority = int.MinValue;
+ internal const int MinPriority = -1_000_000;
+ internal const int ProxyPriority = -2_000_000;
- public const string ContentTypeJson = "application/json";
- public const string ContentTypeTextPlain = "text/plain";
+ internal const string ContentTypeJson = "application/json";
+ internal const string ContentTypeTextPlain = "text/plain";
- public const string NoMatchingFound = "No matching mapping found";
-}
\ No newline at end of file
+ internal const string NoMatchingFound = "No matching mapping found";
+}
\ No newline at end of file
diff --git a/src/WireMock.Net/Matchers/RegexMatcher.cs b/src/WireMock.Net/Matchers/RegexMatcher.cs
index 7e717e6c..fca241eb 100644
--- a/src/WireMock.Net/Matchers/RegexMatcher.cs
+++ b/src/WireMock.Net/Matchers/RegexMatcher.cs
@@ -5,10 +5,11 @@ using System.Linq;
using System.Text.RegularExpressions;
using AnyOfTypes;
using JetBrains.Annotations;
+using Stef.Validation;
+using WireMock.Constants;
using WireMock.Extensions;
using WireMock.Models;
using WireMock.RegularExpressions;
-using Stef.Validation;
namespace WireMock.Matchers;
@@ -37,7 +38,7 @@ public class RegexMatcher : IStringMatcher, IIgnoreCaseMatcher
bool ignoreCase = false,
bool useRegexExtended = true,
MatchOperator matchOperator = MatchOperator.Or) :
- this(MatchBehaviour.AcceptOnMatch, new[] { pattern }, ignoreCase, useRegexExtended, matchOperator)
+ this(MatchBehaviour.AcceptOnMatch, [pattern], ignoreCase, useRegexExtended, matchOperator)
{
}
@@ -55,7 +56,7 @@ public class RegexMatcher : IStringMatcher, IIgnoreCaseMatcher
bool ignoreCase = false,
bool useRegexExtended = true,
MatchOperator matchOperator = MatchOperator.Or) :
- this(matchBehaviour, new[] { pattern }, ignoreCase, useRegexExtended, matchOperator)
+ this(matchBehaviour, [pattern], ignoreCase, useRegexExtended, matchOperator)
{
}
@@ -86,7 +87,7 @@ public class RegexMatcher : IStringMatcher, IIgnoreCaseMatcher
options |= RegexOptions.IgnoreCase;
}
- _expressions = patterns.Select(p => useRegexExtended ? new RegexExtended(p.GetPattern(), options) : new Regex(p.GetPattern(), options)).ToArray();
+ _expressions = patterns.Select(p => useRegexExtended ? new RegexExtended(p.GetPattern(), options) : new Regex(p.GetPattern(), options, WireMockConstants.DefaultRegexTimeout)).ToArray();
}
///
diff --git a/src/WireMock.Net/Util/HttpVersionParser.cs b/src/WireMock.Net/Util/HttpVersionParser.cs
index 41a9fd0d..a8e22bdc 100644
--- a/src/WireMock.Net/Util/HttpVersionParser.cs
+++ b/src/WireMock.Net/Util/HttpVersionParser.cs
@@ -1,8 +1,8 @@
// Copyright © WireMock.Net
-using System;
using System.Text.RegularExpressions;
using Stef.Validation;
+using WireMock.Constants;
namespace WireMock.Util;
@@ -11,7 +11,7 @@ namespace WireMock.Util;
///
internal static class HttpVersionParser
{
- private static readonly Regex HttpVersionRegex = new(@"HTTP/(\d+(\.\d+)?(?!\.))", RegexOptions.IgnoreCase | RegexOptions.CultureInvariant | RegexOptions.Compiled, TimeSpan.FromMilliseconds(100));
+ private static readonly Regex HttpVersionRegex = new(@"HTTP/(\d+(\.\d+)?(?!\.))", RegexOptions.IgnoreCase | RegexOptions.CultureInvariant | RegexOptions.Compiled, WireMockConstants.DefaultRegexTimeout);
///
/// Try to extract the version (as a string) from the protocol.
diff --git a/src/WireMock.Net/Util/PortUtils.cs b/src/WireMock.Net/Util/PortUtils.cs
index 9d76c95d..843ce8d7 100644
--- a/src/WireMock.Net/Util/PortUtils.cs
+++ b/src/WireMock.Net/Util/PortUtils.cs
@@ -5,6 +5,7 @@ using System.Diagnostics.CodeAnalysis;
using System.Net;
using System.Net.Sockets;
using System.Text.RegularExpressions;
+using WireMock.Constants;
namespace WireMock.Util;
@@ -13,7 +14,7 @@ namespace WireMock.Util;
///
internal static class PortUtils
{
- private static readonly Regex UrlDetailsRegex = new(@"^((?\w+)://)(?[^/]+?):(?\d+)\/?$", RegexOptions.Compiled);
+ private static readonly Regex UrlDetailsRegex = new(@"^((?\w+)://)(?[^/]+?):(?\d+)\/?$", RegexOptions.Compiled, WireMockConstants.DefaultRegexTimeout);
///
/// Finds a free TCP port.
diff --git a/src/WireMock.Net/Util/RegexUtils.cs b/src/WireMock.Net/Util/RegexUtils.cs
index c64ef4bd..622df7d5 100644
--- a/src/WireMock.Net/Util/RegexUtils.cs
+++ b/src/WireMock.Net/Util/RegexUtils.cs
@@ -1,16 +1,14 @@
// Copyright © WireMock.Net
-using System;
using System.Collections.Generic;
using System.Text.RegularExpressions;
+using WireMock.Constants;
using WireMock.RegularExpressions;
namespace WireMock.Util;
internal static class RegexUtils
{
- private static readonly TimeSpan RegexTimeOut = new(0, 0, 10);
-
public static Dictionary GetNamedGroups(Regex regex, string input)
{
var namedGroupsDictionary = new Dictionary();
@@ -38,11 +36,11 @@ internal static class RegexUtils
{
if (useRegexExtended)
{
- var regexExtended = new RegexExtended(pattern!, RegexOptions.None, RegexTimeOut);
+ var regexExtended = new RegexExtended(pattern!, RegexOptions.None, WireMockConstants.DefaultRegexTimeout);
return (true, regexExtended.IsMatch(input));
}
- var regex = new Regex(pattern, RegexOptions.None, RegexTimeOut);
+ var regex = new Regex(pattern, RegexOptions.None, WireMockConstants.DefaultRegexTimeout);
return (true, regex.IsMatch(input));
}
catch