-Fixed JSON string encoder not getting buffer from buffer pool
This commit is contained in:
@@ -609,23 +609,25 @@ namespace Newtonsoft.Json.Tests
|
||||
|
||||
Assert.AreEqual(4, value.Count);
|
||||
}
|
||||
|
||||
public class JsonArrayPool : IArrayPool<char>
|
||||
{
|
||||
public static readonly JsonArrayPool Instance = new JsonArrayPool();
|
||||
|
||||
public char[] Rent(int minimumLength)
|
||||
{
|
||||
// use System.Buffers shared pool
|
||||
return ArrayPool<char>.Shared.Rent(minimumLength);
|
||||
}
|
||||
|
||||
public void Return(char[] array)
|
||||
{
|
||||
// use System.Buffers shared pool
|
||||
ArrayPool<char>.Shared.Return(array);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
#if !(NET20 || NET35 || NET40 || NETFX_CORE || PORTABLE || PORTABLE40 || DNXCORE50)
|
||||
public class JsonArrayPool : IArrayPool<char>
|
||||
{
|
||||
public static readonly JsonArrayPool Instance = new JsonArrayPool();
|
||||
|
||||
public char[] Rent(int minimumLength)
|
||||
{
|
||||
// use System.Buffers shared pool
|
||||
return ArrayPool<char>.Shared.Rent(minimumLength);
|
||||
}
|
||||
|
||||
public void Return(char[] array)
|
||||
{
|
||||
// use System.Buffers shared pool
|
||||
ArrayPool<char>.Shared.Return(array);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
}
|
||||
@@ -49,6 +49,7 @@ using NUnit.Framework;
|
||||
using Newtonsoft.Json;
|
||||
using System.IO;
|
||||
using Newtonsoft.Json.Converters;
|
||||
using Newtonsoft.Json.Linq;
|
||||
using Newtonsoft.Json.Utilities;
|
||||
|
||||
namespace Newtonsoft.Json.Tests
|
||||
@@ -136,6 +137,33 @@ namespace Newtonsoft.Json.Tests
|
||||
Assert.AreEqual(1, arrayPool.FreeArrays.Count);
|
||||
}
|
||||
|
||||
#if !(NET20 || NET35 || NET40 || NETFX_CORE || PORTABLE || PORTABLE40 || DNXCORE50)
|
||||
[Test]
|
||||
public void BufferErroringWithInvalidSize()
|
||||
{
|
||||
JObject o = new JObject
|
||||
{
|
||||
{"BodyHtml", "<h3>Title!</h3>" + Environment.NewLine + new string(' ', 100) + "<p>Content!</p>"}
|
||||
};
|
||||
|
||||
JsonArrayPool arrayPool = new JsonArrayPool();
|
||||
|
||||
StringWriter sw = new StringWriter();
|
||||
using (JsonTextWriter writer = new JsonTextWriter(sw))
|
||||
{
|
||||
writer.ArrayPool = arrayPool;
|
||||
|
||||
o.WriteTo(writer);
|
||||
}
|
||||
|
||||
string result = o.ToString();
|
||||
|
||||
Assert.AreEqual(@"{
|
||||
""BodyHtml"": ""<h3>Title!</h3>\r\n <p>Content!</p>""
|
||||
}", result);
|
||||
}
|
||||
#endif
|
||||
|
||||
[Test]
|
||||
public void NewLine()
|
||||
{
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
"Autofac": "4.0.0-beta7-130",
|
||||
"FSharp.Core": "4.0.0.1",
|
||||
"NUnit": "2.6.2",
|
||||
"System.Buffers": "4.0.0-rc2-23623",
|
||||
"System.Buffers": "4.0.0-rc2-23826",
|
||||
"System.Collections.Immutable": "1.1.37"
|
||||
},
|
||||
"frameworks": {
|
||||
|
||||
@@ -33,7 +33,7 @@
|
||||
"FSharp.Core": "4.0.0.1",
|
||||
"NUnit": "2.6.4",
|
||||
"System.Collections.Immutable": "1.1.37",
|
||||
"System.Buffers": "4.0.0-rc2-23623"
|
||||
"System.Buffers": "4.0.0-rc2-23826"
|
||||
}
|
||||
},
|
||||
"net40": {
|
||||
|
||||
@@ -286,7 +286,7 @@ namespace Newtonsoft.Json.Utilities
|
||||
|
||||
if (writeBuffer == null || writeBuffer.Length < length)
|
||||
{
|
||||
writeBuffer = new char[length];
|
||||
writeBuffer = BufferUtils.EnsureBufferSize(bufferPool, length, writeBuffer);
|
||||
}
|
||||
|
||||
s.CopyTo(lastWritePosition, writeBuffer, 0, length);
|
||||
|
||||
Reference in New Issue
Block a user