From 037eeed7468fe3b223dd184a6d2045569d6c82a0 Mon Sep 17 00:00:00 2001 From: Shadowghost Date: Sun, 19 Feb 2023 14:55:22 +0100 Subject: [PATCH 1/2] Fix EqualsAny condition check for int and double --- MediaBrowser.Model/Dlna/ConditionProcessor.cs | 35 +++++++++++++++++-- 1 file changed, 32 insertions(+), 3 deletions(-) diff --git a/MediaBrowser.Model/Dlna/ConditionProcessor.cs b/MediaBrowser.Model/Dlna/ConditionProcessor.cs index 5734224167..a38681bade 100644 --- a/MediaBrowser.Model/Dlna/ConditionProcessor.cs +++ b/MediaBrowser.Model/Dlna/ConditionProcessor.cs @@ -136,12 +136,26 @@ namespace MediaBrowser.Model.Dlna return !condition.IsRequired; } + var conditionType = condition.Condition; + if (condition.Condition == ProfileConditionType.EqualsAny) + { + foreach (var singleConditionString in condition.Value.AsSpan().Split('|')) + { + if (int.TryParse(singleConditionString, NumberStyles.Any, CultureInfo.InvariantCulture, out int conditionValue) + && conditionValue.Equals(currentValue)) + { + return true; + } + } + + return false; + } + if (int.TryParse(condition.Value, NumberStyles.Any, CultureInfo.InvariantCulture, out var expected)) { - switch (condition.Condition) + switch (conditionType) { case ProfileConditionType.Equals: - case ProfileConditionType.EqualsAny: return currentValue.Value.Equals(expected); case ProfileConditionType.GreaterThanEqual: return currentValue.Value >= expected; @@ -212,9 +226,24 @@ namespace MediaBrowser.Model.Dlna return !condition.IsRequired; } + var conditionType = condition.Condition; + if (condition.Condition == ProfileConditionType.EqualsAny) + { + foreach (var singleConditionString in condition.Value.AsSpan().Split('|')) + { + if (double.TryParse(singleConditionString, NumberStyles.Any, CultureInfo.InvariantCulture, out double conditionValue) + && conditionValue.Equals(currentValue)) + { + return true; + } + } + + return false; + } + if (double.TryParse(condition.Value, NumberStyles.Any, CultureInfo.InvariantCulture, out var expected)) { - switch (condition.Condition) + switch (conditionType) { case ProfileConditionType.Equals: return currentValue.Value.Equals(expected); From 9a14a624a81a9c632520dec5417511ac5b73ad3b Mon Sep 17 00:00:00 2001 From: Shadowghost Date: Sun, 19 Feb 2023 15:11:15 +0100 Subject: [PATCH 2/2] Apply review suggestions --- MediaBrowser.Model/Dlna/ConditionProcessor.cs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/MediaBrowser.Model/Dlna/ConditionProcessor.cs b/MediaBrowser.Model/Dlna/ConditionProcessor.cs index a38681bade..f5e1a3c496 100644 --- a/MediaBrowser.Model/Dlna/ConditionProcessor.cs +++ b/MediaBrowser.Model/Dlna/ConditionProcessor.cs @@ -141,7 +141,7 @@ namespace MediaBrowser.Model.Dlna { foreach (var singleConditionString in condition.Value.AsSpan().Split('|')) { - if (int.TryParse(singleConditionString, NumberStyles.Any, CultureInfo.InvariantCulture, out int conditionValue) + if (int.TryParse(singleConditionString, NumberStyles.Integer, CultureInfo.InvariantCulture, out int conditionValue) && conditionValue.Equals(currentValue)) { return true; @@ -151,7 +151,7 @@ namespace MediaBrowser.Model.Dlna return false; } - if (int.TryParse(condition.Value, NumberStyles.Any, CultureInfo.InvariantCulture, out var expected)) + if (int.TryParse(condition.Value, NumberStyles.Integer, CultureInfo.InvariantCulture, out var expected)) { switch (conditionType) { @@ -231,7 +231,7 @@ namespace MediaBrowser.Model.Dlna { foreach (var singleConditionString in condition.Value.AsSpan().Split('|')) { - if (double.TryParse(singleConditionString, NumberStyles.Any, CultureInfo.InvariantCulture, out double conditionValue) + if (double.TryParse(singleConditionString, NumberStyles.Float | NumberStyles.AllowThousands, CultureInfo.InvariantCulture, out double conditionValue) && conditionValue.Equals(currentValue)) { return true; @@ -241,7 +241,7 @@ namespace MediaBrowser.Model.Dlna return false; } - if (double.TryParse(condition.Value, NumberStyles.Any, CultureInfo.InvariantCulture, out var expected)) + if (double.TryParse(condition.Value, NumberStyles.Float | NumberStyles.AllowThousands, CultureInfo.InvariantCulture, out var expected)) { switch (conditionType) {