diff options
| author | Markus Prettner <markus.prettner@outlook.com> | 2025-04-09 03:21:57 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-04-08 19:21:57 -0600 |
| commit | c152f610ce4acb36d940c032bdf624c269d37d6b (patch) | |
| tree | ad7ae47c82d38dfe9c40c560aac142c8b171f7c0 /MediaBrowser.Common/Net/NetworkUtils.cs | |
| parent | 0bbc6bb31d5a28851a12f8020aac5a258df87a23 (diff) | |
Fix negated IP addresses without subnet mask not being parsed correctly (#13854)
Diffstat (limited to 'MediaBrowser.Common/Net/NetworkUtils.cs')
| -rw-r--r-- | MediaBrowser.Common/Net/NetworkUtils.cs | 21 |
1 files changed, 16 insertions, 5 deletions
diff --git a/MediaBrowser.Common/Net/NetworkUtils.cs b/MediaBrowser.Common/Net/NetworkUtils.cs index a498d6271..24ed47a81 100644 --- a/MediaBrowser.Common/Net/NetworkUtils.cs +++ b/MediaBrowser.Common/Net/NetworkUtils.cs @@ -198,14 +198,25 @@ public static partial class NetworkUtils /// <returns><c>True</c> if parsing was successful.</returns> public static bool TryParseToSubnet(ReadOnlySpan<char> value, [NotNullWhen(true)] out IPNetwork? result, bool negated = false) { + // If multiple IP addresses are in a comma-separated string, the individual addresses may contain leading and/or trailing whitespace value = value.Trim(); + + bool isAddressNegated = false; + if (value.StartsWith('!')) + { + isAddressNegated = true; + value = value[1..]; // Remove leading '!' character + } + + if (isAddressNegated != negated) + { + result = null; + return false; + } + if (value.Contains('/')) { - if (negated && value.StartsWith("!") && IPNetwork.TryParse(value[1..], out result)) - { - return true; - } - else if (!negated && IPNetwork.TryParse(value, out result)) + if (IPNetwork.TryParse(value, out result)) { return true; } |
