Removes quotes from names in ContentDispositionHeaderValue

This commit is contained in:
Justin Kotalik 2017-07-14 18:06:06 -07:00
parent 78768e38c8
commit a8270a4901
2 changed files with 17 additions and 3 deletions

View File

@ -73,6 +73,7 @@ namespace Microsoft.Net.Http.Headers
set { SetName(NameString, value); }
}
public StringSegment FileName
{
get { return GetName(FileNameString); }
@ -337,7 +338,7 @@ namespace Microsoft.Net.Http.Headers
// Gets a parameter of the given name and attempts to decode it if necessary.
// Returns null if the parameter is not present or the raw value if the encoding is incorrect.
private string GetName(string parameter)
private StringSegment GetName(string parameter)
{
var nameParameter = NameValueHeaderValue.Find(_parameters, parameter);
if (nameParameter != null)
@ -359,7 +360,7 @@ namespace Microsoft.Net.Http.Headers
return result;
}
// May not have been encoded
return nameParameter.Value.ToString();
return HeaderUtilities.RemoveQuotes(nameParameter.Value);
}
return null;
}

View File

@ -152,7 +152,7 @@ namespace Microsoft.Net.Http.Headers
Assert.Equal(1, contentDisposition.Parameters.Count);
Assert.Equal("FILENAME", contentDisposition.Parameters.First().Name);
Assert.Equal("\"=?utf-99?Q?R=mlsZcODTmFtZS5iYXQ=?=\"", contentDisposition.Parameters.First().Value);
Assert.Equal("\"=?utf-99?Q?R=mlsZcODTmFtZS5iYXQ=?=\"", contentDisposition.FileName);
Assert.Equal("=?utf-99?Q?R=mlsZcODTmFtZS5iYXQ=?=", contentDisposition.FileName);
contentDisposition.FileName = "new_name";
Assert.Equal("new_name", contentDisposition.FileName);
@ -560,6 +560,19 @@ namespace Microsoft.Net.Http.Headers
Assert.Throws<FormatException>(() => ContentDispositionHeaderValue.Parse(input));
}
[Fact]
public void HeaderNamesWithQuotes_ExpectNamesToNotHaveQuotes()
{
var contentDispositionLine = "form-data; name =\"dotnet\"; filename=\"example.png\"";
var expectedName = "dotnet";
var expectedFileName = "example.png";
var result = ContentDispositionHeaderValue.Parse(contentDispositionLine);
Assert.Equal(expectedName, result.Name);
Assert.Equal(expectedFileName, result.FileName);
}
public class ContentDispositionValue
{
public ContentDispositionValue(string value, string description, bool valid)