parent
e9b050735c
commit
66de493473
|
|
@ -252,6 +252,8 @@ namespace Microsoft.AspNetCore.WebUtilities
|
||||||
{
|
{
|
||||||
ParseFormValuesFast(keyValuePair.FirstSpan, ref accumulator, isFinalBlock: true, out var segmentConsumed);
|
ParseFormValuesFast(keyValuePair.FirstSpan, ref accumulator, isFinalBlock: true, out var segmentConsumed);
|
||||||
Debug.Assert(segmentConsumed == keyValuePair.FirstSpan.Length);
|
Debug.Assert(segmentConsumed == keyValuePair.FirstSpan.Length);
|
||||||
|
consumedBytes = sequenceReader.Consumed;
|
||||||
|
consumed = sequenceReader.Position;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -184,6 +184,7 @@ namespace Microsoft.AspNetCore.WebUtilities
|
||||||
var formReader = new FormPipeReader(null, encoding);
|
var formReader = new FormPipeReader(null, encoding);
|
||||||
|
|
||||||
formReader.ParseFormValues(ref readOnlySequence, ref accumulator, isFinalBlock: true);
|
formReader.ParseFormValues(ref readOnlySequence, ref accumulator, isFinalBlock: true);
|
||||||
|
Assert.True(readOnlySequence.IsEmpty);
|
||||||
|
|
||||||
Assert.Equal(2, accumulator.KeyCount);
|
Assert.Equal(2, accumulator.KeyCount);
|
||||||
var dict = accumulator.GetResults();
|
var dict = accumulator.GetResults();
|
||||||
|
|
@ -201,6 +202,7 @@ namespace Microsoft.AspNetCore.WebUtilities
|
||||||
|
|
||||||
var formReader = new FormPipeReader(null, encoding);
|
var formReader = new FormPipeReader(null, encoding);
|
||||||
formReader.ParseFormValues(ref readOnlySequence, ref accumulator, isFinalBlock: true);
|
formReader.ParseFormValues(ref readOnlySequence, ref accumulator, isFinalBlock: true);
|
||||||
|
Assert.True(readOnlySequence.IsEmpty);
|
||||||
|
|
||||||
Assert.Equal(3, accumulator.KeyCount);
|
Assert.Equal(3, accumulator.KeyCount);
|
||||||
var dict = accumulator.GetResults();
|
var dict = accumulator.GetResults();
|
||||||
|
|
@ -219,6 +221,7 @@ namespace Microsoft.AspNetCore.WebUtilities
|
||||||
|
|
||||||
var formReader = new FormPipeReader(null, encoding);
|
var formReader = new FormPipeReader(null, encoding);
|
||||||
formReader.ParseFormValues(ref readOnlySequence, ref accumulator, isFinalBlock: true);
|
formReader.ParseFormValues(ref readOnlySequence, ref accumulator, isFinalBlock: true);
|
||||||
|
Assert.True(readOnlySequence.IsEmpty);
|
||||||
|
|
||||||
Assert.Equal(3, accumulator.KeyCount);
|
Assert.Equal(3, accumulator.KeyCount);
|
||||||
var dict = accumulator.GetResults();
|
var dict = accumulator.GetResults();
|
||||||
|
|
@ -237,6 +240,7 @@ namespace Microsoft.AspNetCore.WebUtilities
|
||||||
|
|
||||||
var formReader = new FormPipeReader(null, encoding);
|
var formReader = new FormPipeReader(null, encoding);
|
||||||
formReader.ParseFormValues(ref readOnlySequence, ref accumulator, isFinalBlock: true);
|
formReader.ParseFormValues(ref readOnlySequence, ref accumulator, isFinalBlock: true);
|
||||||
|
Assert.True(readOnlySequence.IsEmpty);
|
||||||
|
|
||||||
Assert.Equal(2, accumulator.KeyCount);
|
Assert.Equal(2, accumulator.KeyCount);
|
||||||
var dict = accumulator.GetResults();
|
var dict = accumulator.GetResults();
|
||||||
|
|
@ -254,6 +258,7 @@ namespace Microsoft.AspNetCore.WebUtilities
|
||||||
|
|
||||||
var formReader = new FormPipeReader(null, encoding);
|
var formReader = new FormPipeReader(null, encoding);
|
||||||
formReader.ParseFormValues(ref readOnlySequence, ref accumulator, isFinalBlock: true);
|
formReader.ParseFormValues(ref readOnlySequence, ref accumulator, isFinalBlock: true);
|
||||||
|
Assert.True(readOnlySequence.IsEmpty);
|
||||||
|
|
||||||
Assert.Equal(3, accumulator.KeyCount);
|
Assert.Equal(3, accumulator.KeyCount);
|
||||||
var dict = accumulator.GetResults();
|
var dict = accumulator.GetResults();
|
||||||
|
|
@ -272,6 +277,7 @@ namespace Microsoft.AspNetCore.WebUtilities
|
||||||
|
|
||||||
var formReader = new FormPipeReader(null, encoding);
|
var formReader = new FormPipeReader(null, encoding);
|
||||||
formReader.ParseFormValues(ref readOnlySequence, ref accumulator, isFinalBlock: true);
|
formReader.ParseFormValues(ref readOnlySequence, ref accumulator, isFinalBlock: true);
|
||||||
|
Assert.True(readOnlySequence.IsEmpty);
|
||||||
|
|
||||||
Assert.Equal(3, accumulator.KeyCount);
|
Assert.Equal(3, accumulator.KeyCount);
|
||||||
var dict = accumulator.GetResults();
|
var dict = accumulator.GetResults();
|
||||||
|
|
@ -290,6 +296,7 @@ namespace Microsoft.AspNetCore.WebUtilities
|
||||||
|
|
||||||
var formReader = new FormPipeReader(null, encoding);
|
var formReader = new FormPipeReader(null, encoding);
|
||||||
formReader.ParseFormValues(ref readOnlySequence, ref accumulator, isFinalBlock: true);
|
formReader.ParseFormValues(ref readOnlySequence, ref accumulator, isFinalBlock: true);
|
||||||
|
Assert.True(readOnlySequence.IsEmpty);
|
||||||
|
|
||||||
Assert.Equal(2, accumulator.KeyCount);
|
Assert.Equal(2, accumulator.KeyCount);
|
||||||
var dict = accumulator.GetResults();
|
var dict = accumulator.GetResults();
|
||||||
|
|
@ -297,6 +304,23 @@ namespace Microsoft.AspNetCore.WebUtilities
|
||||||
Assert.Equal("wow", dict["\"%-.<>\\^_`{|}"]);
|
Assert.Equal("wow", dict["\"%-.<>\\^_`{|}"]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void TryParseFormValues_MultiSegmentFastPathWorks()
|
||||||
|
{
|
||||||
|
var readOnlySequence = ReadOnlySequenceFactory.CreateSegments(Encoding.UTF8.GetBytes("foo=bar&"), Encoding.UTF8.GetBytes("baz=boo"));
|
||||||
|
|
||||||
|
KeyValueAccumulator accumulator = default;
|
||||||
|
|
||||||
|
var formReader = new FormPipeReader(null);
|
||||||
|
formReader.ParseFormValues(ref readOnlySequence, ref accumulator, isFinalBlock: true);
|
||||||
|
Assert.True(readOnlySequence.IsEmpty);
|
||||||
|
|
||||||
|
Assert.Equal(2, accumulator.KeyCount);
|
||||||
|
var dict = accumulator.GetResults();
|
||||||
|
Assert.Equal("bar", dict["foo"]);
|
||||||
|
Assert.Equal("boo", dict["baz"]);
|
||||||
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void TryParseFormValues_ExceedKeyLengthThrows()
|
public void TryParseFormValues_ExceedKeyLengthThrows()
|
||||||
{
|
{
|
||||||
|
|
@ -411,6 +435,7 @@ namespace Microsoft.AspNetCore.WebUtilities
|
||||||
};
|
};
|
||||||
|
|
||||||
formReader.ParseFormValues(ref readOnlySequence, ref accumulator, isFinalBlock: true);
|
formReader.ParseFormValues(ref readOnlySequence, ref accumulator, isFinalBlock: true);
|
||||||
|
Assert.True(readOnlySequence.IsEmpty);
|
||||||
|
|
||||||
IDictionary<string, StringValues> values = accumulator.GetResults();
|
IDictionary<string, StringValues> values = accumulator.GetResults();
|
||||||
Assert.Contains("fo", values);
|
Assert.Contains("fo", values);
|
||||||
|
|
@ -431,6 +456,7 @@ namespace Microsoft.AspNetCore.WebUtilities
|
||||||
};
|
};
|
||||||
|
|
||||||
formReader.ParseFormValues(ref readOnlySequence, ref accumulator, isFinalBlock: true);
|
formReader.ParseFormValues(ref readOnlySequence, ref accumulator, isFinalBlock: true);
|
||||||
|
Assert.True(readOnlySequence.IsEmpty);
|
||||||
|
|
||||||
IDictionary<string, StringValues> values = accumulator.GetResults();
|
IDictionary<string, StringValues> values = accumulator.GetResults();
|
||||||
Assert.Contains("fo", values);
|
Assert.Contains("fo", values);
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue