You've already forked linux-packaging-mono
Imported Upstream version 3.12.0
Former-commit-id: cf92446697332992ec36726e78eb8703e1f259d7
This commit is contained in:
@ -120,9 +120,17 @@ namespace System.Net.Http.Headers
|
||||
|
||||
public string Name {
|
||||
get {
|
||||
return FindParameter ("name");
|
||||
var value = FindParameter ("name");
|
||||
|
||||
if (value == null)
|
||||
return null;
|
||||
|
||||
return DecodeValue (value, false);
|
||||
}
|
||||
set {
|
||||
if (value != null)
|
||||
value = EncodeBase64Value (value);
|
||||
|
||||
SetValue ("name", value);
|
||||
}
|
||||
}
|
||||
@ -249,6 +257,11 @@ namespace System.Net.Http.Headers
|
||||
continue;
|
||||
}
|
||||
|
||||
if (!Lexer.IsValidCharacter (ch) || ch == '*' || ch == '?' || ch == '%') {
|
||||
sb.Append (Uri.HexEscape (ch));
|
||||
continue;
|
||||
}
|
||||
|
||||
sb.Append (ch);
|
||||
}
|
||||
|
||||
|
@ -170,7 +170,7 @@ namespace System.Net.Http.Headers
|
||||
} else {
|
||||
value.From = nvalue;
|
||||
|
||||
t = lexer.Scan ();
|
||||
t = lexer.Scan (recognizeDash: true);
|
||||
if (t != Token.Type.SeparatorDash)
|
||||
return false;
|
||||
|
||||
|
@ -96,6 +96,7 @@ namespace System.Net.Http.Headers
|
||||
HeaderInfo.CreateSingle<AuthenticationHeaderValue> ("Authorization", AuthenticationHeaderValue.TryParse, HttpHeaderKind.Request),
|
||||
HeaderInfo.CreateSingle<CacheControlHeaderValue> ("Cache-Control", CacheControlHeaderValue.TryParse, HttpHeaderKind.Request | HttpHeaderKind.Response),
|
||||
HeaderInfo.CreateMulti<string> ("Connection", CollectionParser.TryParse, HttpHeaderKind.Request | HttpHeaderKind.Response),
|
||||
HeaderInfo.CreateSingle<ContentDispositionHeaderValue> ("Content-Disposition", ContentDispositionHeaderValue.TryParse, HttpHeaderKind.Content),
|
||||
HeaderInfo.CreateMulti<string> ("Content-Encoding", CollectionParser.TryParse, HttpHeaderKind.Content),
|
||||
HeaderInfo.CreateMulti<string> ("Content-Language", CollectionParser.TryParse, HttpHeaderKind.Content),
|
||||
HeaderInfo.CreateSingle<long> ("Content-Length", Parser.Long.TryParse, HttpHeaderKind.Content),
|
||||
|
@ -193,13 +193,18 @@ namespace System.Net.Http.Headers
|
||||
//
|
||||
for (; i < input.Length; ++i) {
|
||||
char s = input[i];
|
||||
if (s > last_token_char || !token_chars[s])
|
||||
if (!IsValidCharacter (s))
|
||||
return false;
|
||||
}
|
||||
|
||||
return i > 0;
|
||||
}
|
||||
|
||||
public static bool IsValidCharacter (char input)
|
||||
{
|
||||
return input <= last_token_char && token_chars[input];
|
||||
}
|
||||
|
||||
public void EatChar ()
|
||||
{
|
||||
++pos;
|
||||
@ -247,7 +252,7 @@ namespace System.Net.Http.Headers
|
||||
return false;
|
||||
}
|
||||
|
||||
public Token Scan ()
|
||||
public Token Scan (bool recognizeDash = false)
|
||||
{
|
||||
int start = pos;
|
||||
if (s == null)
|
||||
@ -279,8 +284,12 @@ namespace System.Net.Http.Headers
|
||||
ttype = Token.Type.SeparatorSlash;
|
||||
break;
|
||||
case '-':
|
||||
ttype = Token.Type.SeparatorDash;
|
||||
break;
|
||||
if (recognizeDash) {
|
||||
ttype = Token.Type.SeparatorDash;
|
||||
break;
|
||||
}
|
||||
|
||||
goto default;
|
||||
case ',':
|
||||
ttype = Token.Type.SeparatorComma;
|
||||
break;
|
||||
|
@ -127,7 +127,7 @@ namespace System.Net.Http.Headers
|
||||
int number;
|
||||
token_read = false;
|
||||
|
||||
t = lexer.Scan ();
|
||||
t = lexer.Scan (recognizeDash: true);
|
||||
switch (t.Kind) {
|
||||
case Token.Type.SeparatorDash:
|
||||
t = lexer.Scan ();
|
||||
@ -144,7 +144,7 @@ namespace System.Net.Http.Headers
|
||||
|
||||
switch (values.Length) {
|
||||
case 1:
|
||||
t = lexer.Scan ();
|
||||
t = lexer.Scan (recognizeDash: true);
|
||||
from = number;
|
||||
switch (t.Kind) {
|
||||
case Token.Type.SeparatorDash:
|
||||
|
@ -50,7 +50,6 @@ namespace System.Net.Http
|
||||
bool useProxy;
|
||||
ClientCertificateOption certificate;
|
||||
bool sentRequest;
|
||||
HttpWebRequest wrequest;
|
||||
string connectionGroupName;
|
||||
bool disposed;
|
||||
|
||||
@ -221,12 +220,9 @@ namespace System.Net.Http
|
||||
|
||||
protected override void Dispose (bool disposing)
|
||||
{
|
||||
if (disposing) {
|
||||
if (wrequest != null) {
|
||||
wrequest.ServicePoint.CloseConnectionGroup (wrequest.ConnectionGroupName);
|
||||
Volatile.Write (ref wrequest, null);
|
||||
}
|
||||
if (disposing && !disposed) {
|
||||
Volatile.Write (ref disposed, true);
|
||||
ServicePointManager.CloseConnectionGroup (connectionGroupName);
|
||||
}
|
||||
|
||||
base.Dispose (disposing);
|
||||
@ -317,7 +313,7 @@ namespace System.Net.Http
|
||||
throw new ObjectDisposedException (GetType ().ToString ());
|
||||
|
||||
Volatile.Write (ref sentRequest, true);
|
||||
wrequest = CreateWebRequest (request);
|
||||
var wrequest = CreateWebRequest (request);
|
||||
|
||||
if (request.Content != null) {
|
||||
var headers = wrequest.Headers;
|
||||
|
@ -237,6 +237,36 @@ namespace MonoTests.System.Net.Http.Headers
|
||||
value.FileNameStar = "ÄŤ";
|
||||
Assert.AreEqual ("ÄŤ", value.FileNameStar, "#11");
|
||||
Assert.AreEqual (new NameValueHeaderValue ("filename*", "utf-8''%C4%8D"), value.Parameters.First (), "#12");
|
||||
|
||||
value.FileNameStar = "@x*\\%?.txt";
|
||||
Assert.AreEqual ("@x*\\%?.txt", value.FileNameStar, "#21");
|
||||
Assert.AreEqual (new NameValueHeaderValue ("filename*", "utf-8''%40x%2A%5C%25%3F.txt"), value.Parameters.First (), "#22");
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void Properties_Name ()
|
||||
{
|
||||
var value = new ContentDispositionHeaderValue ("a");
|
||||
|
||||
value.Name = "aa";
|
||||
Assert.AreEqual ("aa", value.Name, "#1");
|
||||
Assert.AreEqual (new NameValueHeaderValue ("name", "aa"), value.Parameters.First (), "#2");
|
||||
|
||||
value.Name = "ÄŤ";
|
||||
Assert.AreEqual ("ÄŤ", value.Name, "#11");
|
||||
Assert.AreEqual (new NameValueHeaderValue ("name", "\"=?utf-8?B?xI0=?=\""), value.Parameters.First (), "#12");
|
||||
|
||||
value.Name = "(@)";
|
||||
Assert.AreEqual ("\"(@)\"", value.Name, "#21");
|
||||
Assert.AreEqual (new NameValueHeaderValue ("name", "\"(@)\""), value.Parameters.First (), "#22");
|
||||
|
||||
value.Name = "\"ÄŤ\"";
|
||||
Assert.AreEqual ("ÄŤ", value.Name, "#31");
|
||||
Assert.AreEqual (new NameValueHeaderValue ("name", "\"=?utf-8?B?xI0=?=\""), value.Parameters.First (), "#32");
|
||||
|
||||
value.Name = "\"quoted\"";
|
||||
Assert.AreEqual ("\"quoted\"", value.Name, "#41");
|
||||
Assert.AreEqual (new NameValueHeaderValue ("name", "\"quoted\""), value.Parameters.First (), "#42");
|
||||
}
|
||||
|
||||
[Test]
|
||||
|
@ -31,6 +31,7 @@ using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using NUnit.Framework;
|
||||
using System.Net.Http.Headers;
|
||||
using System.Linq;
|
||||
|
||||
namespace MonoTests.System.Net.Http.Headers
|
||||
{
|
||||
@ -81,6 +82,13 @@ namespace MonoTests.System.Net.Http.Headers
|
||||
Assert.AreEqual ("mu/m", res.MediaType, "#2");
|
||||
Assert.AreEqual ("jj'", res.CharSet, "#2b");
|
||||
Assert.AreEqual ("mu/m; CHarset=jj'", res.ToString (), "#2c");
|
||||
|
||||
res = MediaTypeHeaderValue.Parse ("multipart/form-data; boundary=----Wk");
|
||||
Assert.AreEqual ("multipart/form-data", res.MediaType, "#3");
|
||||
Assert.IsNull (res.CharSet, "#3b");
|
||||
Assert.AreEqual (1, res.Parameters.Count, "#3c");
|
||||
Assert.AreEqual (new NameValueHeaderValue ("boundary", "----Wk"), res.Parameters.First (), "#3d");
|
||||
Assert.AreEqual ("multipart/form-data; boundary=----Wk", res.ToString (), "#3e");
|
||||
}
|
||||
|
||||
[Test]
|
||||
|
@ -222,6 +222,7 @@ namespace MonoTests.System.Net.Http
|
||||
Assert.AreEqual (330, scm.Headers.ContentLength, "#2");
|
||||
|
||||
headers.Allow.Add ("a1");
|
||||
headers.ContentDisposition = new ContentDispositionHeaderValue ("cd1");
|
||||
headers.ContentEncoding.Add ("ce1");
|
||||
headers.ContentLanguage.Add ("cl1");
|
||||
headers.ContentLength = 23;
|
||||
@ -234,6 +235,12 @@ namespace MonoTests.System.Net.Http
|
||||
|
||||
|
||||
headers.Add ("allow", "a2");
|
||||
try {
|
||||
headers.Add ("content-disposition", "cd2");
|
||||
Assert.Fail ("content-disposition");
|
||||
} catch (FormatException) {
|
||||
}
|
||||
|
||||
headers.Add ("content-encoding", "ce3");
|
||||
headers.Add ("content-language", "cl2");
|
||||
|
||||
@ -307,6 +314,7 @@ namespace MonoTests.System.Net.Http
|
||||
Assert.AreEqual (new MediaTypeHeaderValue ("multipart/*"), headers.ContentType);
|
||||
Assert.AreEqual (new DateTimeOffset (DateTime.Today), headers.Expires);
|
||||
Assert.AreEqual (new DateTimeOffset (DateTime.Today), headers.LastModified);
|
||||
Assert.AreEqual (new ContentDispositionHeaderValue ("cd1"), headers.ContentDisposition);
|
||||
}
|
||||
|
||||
[Test]
|
||||
|
Reference in New Issue
Block a user