Browse Source

[System.Net.Http] Handle quoted filename value. Fixes #21960

Marek Safar 11 years ago
parent
commit
2f043e033d

+ 5 - 1
mcs/class/System.Net.Http/System.Net.Http.Headers/ContentDispositionHeaderValue.cs

@@ -211,6 +211,10 @@ namespace System.Net.Http.Headers
 
 		static string EncodeBase64Value (string value)
 		{
+			bool quoted = value.Length > 1 && value [0] == '"' && value [value.Length - 1] == '"';
+			if (quoted)
+				value = value.Substring (1, value.Length - 2);
+
 			for (int i = 0; i < value.Length; ++i) {
 				var ch = value[i];
 				if (ch > 127) {
@@ -220,7 +224,7 @@ namespace System.Net.Http.Headers
 				}
 			}
 
-			if (!Lexer.IsValidToken (value))
+			if (quoted || !Lexer.IsValidToken (value))
 				return "\"" + value + "\"";
 
 			return value;

+ 8 - 0
mcs/class/System.Net.Http/Test/System.Net.Http.Headers/ContentDispositionHeaderValueTest.cs

@@ -215,6 +215,14 @@ namespace MonoTests.System.Net.Http.Headers
 			value.FileName = "(@)";
 			Assert.AreEqual ("\"(@)\"", value.FileName, "#21");
 			Assert.AreEqual (new NameValueHeaderValue ("filename", "\"(@)\""), value.Parameters.First (), "#22");
+
+			value.FileName = "\"č\"";
+			Assert.AreEqual ("č", value.FileName, "#31");
+			Assert.AreEqual (new NameValueHeaderValue ("filename", "\"=?utf-8?B?xI0=?=\""), value.Parameters.First (), "#32");
+
+			value.FileName = "\"quoted\"";
+			Assert.AreEqual ("\"quoted\"", value.FileName, "#41");
+			Assert.AreEqual (new NameValueHeaderValue ("filename", "\"quoted\""), value.Parameters.First (), "#42");
 		}
 
 		[Test]