-Fixed bad BSON when writing long strings of complex UTF8 characters
-Fixed error not being raised for additional content in JSON string for JArray.Parse and JObject.Parse
This commit is contained in:
@@ -1243,5 +1243,24 @@ namespace Newtonsoft.Json.Tests.Bson
|
||||
Assert.AreEqual(new byte[] { 72, 63, 62, 71, 92, 55 }, newObject.Data);
|
||||
}
|
||||
}
|
||||
|
||||
#if !(WINDOWS_PHONE || SILVERLIGHT || NET20 || NET35)
|
||||
public void Utf8Text()
|
||||
{
|
||||
string badText =System.IO.File.ReadAllText(@"PoisonText.txt");
|
||||
var j = new JObject();
|
||||
j["test"] = badText;
|
||||
|
||||
var memoryStream = new MemoryStream();
|
||||
var bsonWriter = new BsonWriter(memoryStream);
|
||||
j.WriteTo(bsonWriter);
|
||||
bsonWriter.Flush();
|
||||
|
||||
memoryStream.Position = 0;
|
||||
JObject o = JObject.Load(new BsonReader(memoryStream));
|
||||
|
||||
Assert.AreEqual(badText, (string)o["test"]);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
}
|
||||
@@ -448,5 +448,18 @@ Parameter name: index")]
|
||||
Assert.AreEqual(123, (int)array[0]);
|
||||
Assert.AreEqual(456, (int)array[1]);
|
||||
}
|
||||
|
||||
[Test]
|
||||
[ExpectedException(typeof(JsonReaderException), ExpectedMessage = "Unexpected state: Finished. Line 5, position 3.")]
|
||||
public void ParseAdditionalContent()
|
||||
{
|
||||
string json = @"[
|
||||
""Small"",
|
||||
""Medium"",
|
||||
""Large""
|
||||
], 987987";
|
||||
|
||||
JArray.Parse(json);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1624,5 +1624,23 @@ Parameter name: arrayIndex")]
|
||||
|
||||
Assert.AreEqual("9065acf3-c820-467d-be50-8d4664beaf35", v.ToString());
|
||||
}
|
||||
|
||||
[Test]
|
||||
[ExpectedException(typeof(JsonReaderException), ExpectedMessage = "Unexpected state: Finished. Line 10, position 3.")]
|
||||
public void ParseAdditionalContent()
|
||||
{
|
||||
string json = @"{
|
||||
""Name"": ""Apple"",
|
||||
""Expiry"": new Date(1230422400000),
|
||||
""Price"": 3.99,
|
||||
""Sizes"": [
|
||||
""Small"",
|
||||
""Medium"",
|
||||
""Large""
|
||||
]
|
||||
}, 987987";
|
||||
|
||||
JObject o = JObject.Parse(json);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -739,5 +739,18 @@ namespace Newtonsoft.Json.Tests.Linq
|
||||
|
||||
Assert.IsTrue(v1.DeepEquals(v2));
|
||||
}
|
||||
|
||||
[Test]
|
||||
[ExpectedException(typeof(JsonReaderException), ExpectedMessage = "Unexpected state: Finished. Line 5, position 3.")]
|
||||
public void ParseAdditionalContent()
|
||||
{
|
||||
string json = @"[
|
||||
""Small"",
|
||||
""Medium"",
|
||||
""Large""
|
||||
], 987987";
|
||||
|
||||
JToken.Parse(json);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -306,6 +306,9 @@
|
||||
<Content Include="bunny_pancake.jpg">
|
||||
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||
</Content>
|
||||
<Content Include="PoisonText.txt">
|
||||
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||
</Content>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<BootstrapperPackage Include="Microsoft.Net.Client.3.5">
|
||||
|
||||
@@ -66,5 +66,5 @@ using System.Runtime.InteropServices;
|
||||
// by using the '*' as shown below:
|
||||
[assembly: AssemblyVersion("4.0.3.0")]
|
||||
#if !PocketPC
|
||||
[assembly: AssemblyFileVersion("4.0.3.14302")]
|
||||
[assembly: AssemblyFileVersion("4.0.3.14319")]
|
||||
#endif
|
||||
|
||||
@@ -5046,6 +5046,7 @@ keyword such as type of business.""
|
||||
}
|
||||
}
|
||||
|
||||
#if !(SILVERLIGHT || WINDOWS_PHONE || NET20)
|
||||
[Test]
|
||||
public void DeserializeDecimalsWithCulture()
|
||||
{
|
||||
@@ -5071,6 +5072,7 @@ keyword such as type of business.""
|
||||
Thread.CurrentThread.CurrentUICulture = initialCulture;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
public class DecimalTestClass
|
||||
|
||||
@@ -10,7 +10,7 @@ namespace Newtonsoft.Json.Bson
|
||||
{
|
||||
internal class BsonBinaryWriter
|
||||
{
|
||||
private static readonly Encoding Encoding = Encoding.UTF8;
|
||||
private static readonly Encoding Encoding = new UTF8Encoding(false);
|
||||
|
||||
private readonly BinaryWriter _writer;
|
||||
|
||||
@@ -169,12 +169,19 @@ namespace Newtonsoft.Json.Bson
|
||||
if (calculatedlengthPrefix != null)
|
||||
_writer.Write(calculatedlengthPrefix.Value);
|
||||
|
||||
WriteUtf8Bytes(s, byteCount);
|
||||
|
||||
_writer.Write((byte)0);
|
||||
}
|
||||
|
||||
public void WriteUtf8Bytes(string s, int byteCount)
|
||||
{
|
||||
if (s != null)
|
||||
{
|
||||
if (_largeByteBuffer == null)
|
||||
{
|
||||
_largeByteBuffer = new byte[256];
|
||||
_maxChars = 256/Encoding.GetMaxByteCount(1);
|
||||
_maxChars = 256 / Encoding.GetMaxByteCount(1);
|
||||
}
|
||||
if (byteCount <= 256)
|
||||
{
|
||||
@@ -183,19 +190,10 @@ namespace Newtonsoft.Json.Bson
|
||||
}
|
||||
else
|
||||
{
|
||||
int charCount;
|
||||
int totalCharsWritten = 0;
|
||||
for (int i = s.Length; i > 0; i -= charCount)
|
||||
{
|
||||
charCount = (i > _maxChars) ? _maxChars : i;
|
||||
int count = Encoding.GetBytes(s, totalCharsWritten, charCount, _largeByteBuffer, 0);
|
||||
_writer.Write(_largeByteBuffer, 0, count);
|
||||
totalCharsWritten += charCount;
|
||||
}
|
||||
byte[] bytes = Encoding.GetBytes(s);
|
||||
_writer.Write(bytes);
|
||||
}
|
||||
}
|
||||
|
||||
_writer.Write((byte)0);
|
||||
}
|
||||
|
||||
private int CalculateSize(int stringByteCount)
|
||||
|
||||
@@ -81,7 +81,7 @@ namespace Newtonsoft.Json.Converters
|
||||
|
||||
if (CamelCaseText)
|
||||
{
|
||||
var names = resolvedEnumName.Split(',').Select(item => StringUtils.ToCamelCase(item.Trim()));
|
||||
string[] names = resolvedEnumName.Split(',').Select(item => StringUtils.ToCamelCase(item.Trim())).ToArray();
|
||||
resolvedEnumName = string.Join(", ", names);
|
||||
}
|
||||
|
||||
|
||||
@@ -136,7 +136,12 @@ namespace Newtonsoft.Json.Linq
|
||||
{
|
||||
JsonReader jsonReader = new JsonTextReader(new StringReader(json));
|
||||
|
||||
return Load(jsonReader);
|
||||
JArray a = Load(jsonReader);
|
||||
|
||||
if (jsonReader.Read() && jsonReader.TokenType != JsonToken.Comment)
|
||||
throw new Exception("Additional text found in JSON string after parsing content.");
|
||||
|
||||
return a;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
||||
@@ -342,7 +342,12 @@ namespace Newtonsoft.Json.Linq
|
||||
{
|
||||
JsonReader jsonReader = new JsonTextReader(new StringReader(json));
|
||||
|
||||
return Load(jsonReader);
|
||||
JObject o = Load(jsonReader);
|
||||
|
||||
if (jsonReader.Read() && jsonReader.TokenType != JsonToken.Comment)
|
||||
throw new Exception("Additional text found in JSON string after parsing content.");
|
||||
|
||||
return o;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
||||
@@ -1229,7 +1229,12 @@ namespace Newtonsoft.Json.Linq
|
||||
{
|
||||
JsonReader jsonReader = new JsonTextReader(new StringReader(json));
|
||||
|
||||
return Load(jsonReader);
|
||||
JToken t = Load(jsonReader);
|
||||
|
||||
if (jsonReader.Read() && jsonReader.TokenType != JsonToken.Comment)
|
||||
throw new Exception("Additional text found in JSON string after parsing content.");
|
||||
|
||||
return t;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
||||
@@ -85,7 +85,7 @@ using System.Security;
|
||||
// by using the '*' as shown below:
|
||||
[assembly: AssemblyVersion("4.0.3.0")]
|
||||
#if !PocketPC
|
||||
[assembly: AssemblyFileVersion("4.0.3.14302")]
|
||||
[assembly: AssemblyFileVersion("4.0.3.14319")]
|
||||
#endif
|
||||
|
||||
[assembly: CLSCompliant(true)]
|
||||
|
||||
Reference in New Issue
Block a user