BaronGreenback пре 4 година
родитељ
комит
bd71de131c

+ 13 - 8
Jellyfin.Server/Middleware/UrlDecodeQueryFeature.cs

@@ -1,6 +1,7 @@
 using System.Collections.Generic;
 using System.Linq;
 using System.Web;
+using MediaBrowser.Common.Extensions;
 using Microsoft.AspNetCore.Http;
 using Microsoft.AspNetCore.Http.Features;
 using Microsoft.Extensions.Primitives;
@@ -61,19 +62,23 @@ namespace Jellyfin.Server.Middleware
                 }
 
                 var pairs = new Dictionary<string, StringValues>();
-                var queryString = unencodedKey.Split('&', System.StringSplitOptions.RemoveEmptyEntries);
+                var queryString = unencodedKey.SpanSplit('&');
 
                 foreach (var pair in queryString)
                 {
-                    var item = pair.Split('=', System.StringSplitOptions.RemoveEmptyEntries);
-                    if (item.Length > 0)
-                    {
-                        pairs.Add(item[0], new StringValues(item.Length == 2 ? item[1] : string.Empty));
-                    }
-                    else
+                    var item = pair.Split('=');
+                    item.MoveNext();
+
+                    var key = item.Current;
+                    var val = item.MoveNext() ? item.Current : string.Empty;
+                    if (key.Length == 0 && val.Length == 0)
                     {
-                        pairs.Add(pair, string.Empty);
+                        // encoded is an equals.
+                        pairs.Add(pair.ToString(), new StringValues(string.Empty));
+                        continue;
                     }
+
+                    pairs.Add(key.ToString(), new StringValues(val.ToString()));
                 }
 
                 _store = new QueryCollection(pairs);

+ 1 - 0
tests/Jellyfin.Api.Tests/Jellyfin.Api.Tests.csproj

@@ -37,6 +37,7 @@
   <ItemGroup>
     <ProjectReference Include="../../Jellyfin.Api/Jellyfin.Api.csproj" />
     <ProjectReference Include="../../Jellyfin.Server.Implementations/Jellyfin.Server.Implementations.csproj" />
+    <ProjectReference Include="..\Jellyfin.Server.Integration.Tests\Jellyfin.Server.Integration.Tests.csproj" />
   </ItemGroup>
 
 </Project>

+ 1 - 0
tests/Jellyfin.Server.Implementations.Tests/Jellyfin.Server.Implementations.Tests.csproj

@@ -42,6 +42,7 @@
   <ItemGroup>
     <ProjectReference Include="..\..\Emby.Server.Implementations\Emby.Server.Implementations.csproj" />
     <ProjectReference Include="..\..\Jellyfin.Server.Implementations\Jellyfin.Server.Implementations.csproj" />
+    <ProjectReference Include="..\Jellyfin.Server.Integration.Tests\Jellyfin.Server.Integration.Tests.csproj" />
   </ItemGroup>
 
 </Project>

+ 2 - 1
tests/Jellyfin.Api.Tests/Controllers/EncodedQueryStringTest.cs → tests/Jellyfin.Server.Implementations.Tests/Middleware/EncodedQueryStringTest.cs

@@ -5,9 +5,10 @@ using System.Net;
 using System.Net.Http;
 using System.Text;
 using System.Threading.Tasks;
+using Jellyfin.Server.Integration.Tests;
 using Xunit;
 
-namespace Jellyfin.Api.Tests.Controllers
+namespace Jellyfin.Server.Implementations.Tests.Middleware
 {
     /// <summary>
     /// Defines the test for encoded querystrings in the url.