From 35aa2aadaf78b7485e3e22daf296c5301f1e0414 Mon Sep 17 00:00:00 2001 From: Justin Kotalik Date: Mon, 30 Jul 2018 00:00:34 -0700 Subject: [PATCH 1/3] Handle subtype with suffix being a subtype without a suffix --- .../MediaTypeHeaderValue.cs | 12 +++++++++++- .../MediaTypeHeaderValueTest.cs | 3 +++ 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/src/Microsoft.Net.Http.Headers/MediaTypeHeaderValue.cs b/src/Microsoft.Net.Http.Headers/MediaTypeHeaderValue.cs index 32074b44..d9a85554 100644 --- a/src/Microsoft.Net.Http.Headers/MediaTypeHeaderValue.cs +++ b/src/Microsoft.Net.Http.Headers/MediaTypeHeaderValue.cs @@ -650,6 +650,7 @@ private bool MatchesSubtype(MediaTypeHeaderValue set) { return true; } + if (set.Suffix.HasValue) { if (Suffix.HasValue) @@ -663,10 +664,19 @@ private bool MatchesSubtype(MediaTypeHeaderValue set) } else { - return set.SubType.Equals(SubType, StringComparison.OrdinalIgnoreCase); + // If this subtype matches either the subtype or suffix of the set, + // it is considered a subtype. + // Ex: application/json > application/val+json + return MatchesEitherSubtypeOrSuffix(set); } } + private bool MatchesEitherSubtypeOrSuffix(MediaTypeHeaderValue set) + { + return set.SubType.Equals(SubType, StringComparison.OrdinalIgnoreCase) + || set.SubType.Equals(Suffix, StringComparison.OrdinalIgnoreCase); + } + private bool MatchesSubtypeWithoutSuffix(MediaTypeHeaderValue set) { return set.MatchesAllSubTypesWithoutSuffix || diff --git a/test/Microsoft.Net.Http.Headers.Tests/MediaTypeHeaderValueTest.cs b/test/Microsoft.Net.Http.Headers.Tests/MediaTypeHeaderValueTest.cs index 75cccabc..e6c45f35 100644 --- a/test/Microsoft.Net.Http.Headers.Tests/MediaTypeHeaderValueTest.cs +++ b/test/Microsoft.Net.Http.Headers.Tests/MediaTypeHeaderValueTest.cs @@ -750,6 +750,8 @@ public void IsSubsetOf_NegativeCases(string mediaType1, string mediaType2) [InlineData("application/entity+json", "application/entity+json")] [InlineData("application/*+json", "application/entity+json")] [InlineData("application/*+json", "application/*+json")] + [InlineData("application/json", "application/problem+json")] + [InlineData("application/json", "application/vnd.restful+json")] [InlineData("application/*", "application/*+JSON")] [InlineData("application/vnd.github+json", "application/vnd.github+json")] [InlineData("application/*", "application/entity+JSON")] @@ -774,6 +776,7 @@ public void IsSubsetOfWithSuffixes_PositiveCases(string set, string subset) [InlineData("application/*+*", "application/json")] [InlineData("application/entity+*", "application/entity+json")] // We don't allow suffixes to be wildcards [InlineData("application/*+*", "application/entity+json")] // We don't allow suffixes to be wildcards + [InlineData("application/entity+json", "application/entity")] public void IsSubSetOfWithSuffixes_NegativeCases(string set, string subset) { // Arrange From 490225478fe7f5a55f62153c5fffdc9a847e511e Mon Sep 17 00:00:00 2001 From: Justin Kotalik Date: Mon, 30 Jul 2018 00:18:01 -0700 Subject: [PATCH 2/3] nit --- .../MediaTypeHeaderValue.cs | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/Microsoft.Net.Http.Headers/MediaTypeHeaderValue.cs b/src/Microsoft.Net.Http.Headers/MediaTypeHeaderValue.cs index d9a85554..a8158bd3 100644 --- a/src/Microsoft.Net.Http.Headers/MediaTypeHeaderValue.cs +++ b/src/Microsoft.Net.Http.Headers/MediaTypeHeaderValue.cs @@ -671,18 +671,18 @@ private bool MatchesSubtype(MediaTypeHeaderValue set) } } - private bool MatchesEitherSubtypeOrSuffix(MediaTypeHeaderValue set) - { - return set.SubType.Equals(SubType, StringComparison.OrdinalIgnoreCase) - || set.SubType.Equals(Suffix, StringComparison.OrdinalIgnoreCase); - } - private bool MatchesSubtypeWithoutSuffix(MediaTypeHeaderValue set) { return set.MatchesAllSubTypesWithoutSuffix || set.SubTypeWithoutSuffix.Equals(SubTypeWithoutSuffix, StringComparison.OrdinalIgnoreCase); } + private bool MatchesEitherSubtypeOrSuffix(MediaTypeHeaderValue set) + { + return set.SubType.Equals(SubType, StringComparison.OrdinalIgnoreCase) || + set.SubType.Equals(Suffix, StringComparison.OrdinalIgnoreCase); + } + private bool MatchesParameters(MediaTypeHeaderValue set) { if (set._parameters != null && set._parameters.Count != 0) From 62d8174658ccba53853dc11229ecc6e7dc225f6d Mon Sep 17 00:00:00 2001 From: Justin Kotalik Date: Mon, 30 Jul 2018 11:52:09 -0700 Subject: [PATCH 3/3] comment --- src/Microsoft.Net.Http.Headers/MediaTypeHeaderValue.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Microsoft.Net.Http.Headers/MediaTypeHeaderValue.cs b/src/Microsoft.Net.Http.Headers/MediaTypeHeaderValue.cs index a8158bd3..e0692108 100644 --- a/src/Microsoft.Net.Http.Headers/MediaTypeHeaderValue.cs +++ b/src/Microsoft.Net.Http.Headers/MediaTypeHeaderValue.cs @@ -664,7 +664,7 @@ private bool MatchesSubtype(MediaTypeHeaderValue set) } else { - // If this subtype matches either the subtype or suffix of the set, + // If this subtype or suffix matches the subtype of the set, // it is considered a subtype. // Ex: application/json > application/val+json return MatchesEitherSubtypeOrSuffix(set);