Fixed: Handle download clients sending invalid content-type header.

DownloadStation incorrectly surrounds charset with double-quotes. whereas the http standard specifies they must be without quotes.

fixes #1586
This commit is contained in:
margaale 2016-12-20 16:54:44 -03:00 committed by Taloth
parent 7f8093de92
commit 8d776abb48
3 changed files with 44 additions and 1 deletions

View File

@ -0,0 +1,42 @@
using NUnit.Framework;
using FluentAssertions;
using NzbDrone.Test.Common;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using NzbDrone.Common.Http;
using System.Collections.Specialized;
namespace NzbDrone.Common.Test.Http
{
[TestFixture]
public class HttpHeaderFixture : TestBase
{
[TestCase("text/html; charset=\"utf-8\"", "utf-8")]
[TestCase("text/html; charset=utf-8", "utf-8")]
public void should_get_encoding_from_content_type_header(string contentType, string charsetExpected)
{
var headers = new NameValueCollection();
headers.Add("Content-Type", contentType);
var httpheader = new HttpHeader(headers);
httpheader.GetEncodingFromContentType().Should().Be(Encoding.GetEncoding(charsetExpected));
}
[TestCase("text/html; charset=asdasd")]
public void should_throw_when_invalid_encoding_is_in_content_type_header(string contentType)
{
var headers = new NameValueCollection();
headers.Add("Content-Type", contentType);
var httpheader = new HttpHeader(headers);
Action action = () => httpheader.GetEncodingFromContentType();
action.ShouldThrow<ArgumentException>();
}
}
}

View File

@ -84,6 +84,7 @@
<Compile Include="ExtensionTests\IEnumerableExtensionTests\IntersectByFixture.cs" />
<Compile Include="ExtensionTests\Int64ExtensionFixture.cs" />
<Compile Include="Http\HttpClientFixture.cs" />
<Compile Include="Http\HttpHeaderFixture.cs" />
<Compile Include="Http\HttpRequestBuilderFixture.cs" />
<Compile Include="Http\HttpRequestFixture.cs" />
<Compile Include="Http\HttpUriFixture.cs" />

View File

@ -145,7 +145,7 @@ namespace NzbDrone.Common.Http
if (charset.IsNotNullOrWhiteSpace())
{
encoding = Encoding.GetEncoding(charset);
encoding = Encoding.GetEncoding(charset.Replace("\"", ""));
}
}