-Fix ReadAsBytes for empty strings

-Fix (hopefully) signing merged assemblies
This commit is contained in:
JamesNK
2010-04-20 07:51:33 +00:00
parent 2f11d3f970
commit 7085a4915f
5 changed files with 60 additions and 5 deletions
+2
View File
@@ -123,6 +123,8 @@ function MergeAssembly($dllPrimaryAssembly, $signKey, [string[]]$mergedAssemlies
$temporaryDir = $primary.DirectoryName + "\" + [Guid]::NewGuid().ToString()
New-Item $temporaryDir -ItemType Directory
$ilMergeKeyFile = switch($signAssemblies) { $true { "/keyfile:$signKeyPath" } default { "" } }
try
{
exec { .\Tools\ILMerge\ilmerge.exe "/internalize" "/closed" "/log:$workingDir\$mergedAssemblyName.MergeLog.txt" $ilMergeKeyFile "/out:$temporaryDir\$mergedAssemblyName" $dllPrimaryAssembly $mergeAssemblyPaths } "Error executing ILMerge"
@@ -261,8 +261,6 @@ namespace Newtonsoft.Json.Tests.Linq
TextReader textReader = new StringReader(json);
JsonReader jsonReader = new JsonTextReader(textReader);
//var result = (HasBytes)JsonSerializer.Create(null)
// .Deserialize(jsonReader, typeof(HasBytes));
var jToken = JToken.ReadFrom(jsonReader);
@@ -273,5 +271,24 @@ namespace Newtonsoft.Json.Tests.Linq
Assert.AreEqual(new byte[] { 1, 2, 3, 4 }, result2.Bytes);
}
[Test]
public void ReadBytesFromEmptyString()
{
var bytes = new HasBytes { Bytes = new byte[0] };
var json = JsonConvert.SerializeObject(bytes);
TextReader textReader = new StringReader(json);
JsonReader jsonReader = new JsonTextReader(textReader);
var jToken = JToken.ReadFrom(jsonReader);
jsonReader = new JTokenReader(jToken);
var result2 = (HasBytes)JsonSerializer.Create(null)
.Deserialize(jsonReader, typeof(HasBytes));
Assert.AreEqual(new byte[0], result2.Bytes);
}
}
}
@@ -3436,5 +3436,32 @@ keyword such as type of business.""
Assert.IsTrue(d.Contains("III"));
}
#endif
private class MyClass
{
public byte[] Prop1 { get; set; }
public MyClass()
{
Prop1 = new byte[0];
}
}
[Test]
public void DeserializeByteArray()
{
JsonSerializer serializer1 = new JsonSerializer();
serializer1.Converters.Add(new IsoDateTimeConverter());
serializer1.NullValueHandling = NullValueHandling.Ignore;
string json = @"[{""Prop1"":""""},{""Prop1"":""""}]";
JsonTextReader reader = new JsonTextReader(new StringReader(json));
MyClass[] z = (MyClass[])serializer1.Deserialize(reader, typeof(MyClass[]));
Assert.AreEqual(2, z.Length);
Assert.AreEqual(0, z[0].Prop1.Length);
Assert.AreEqual(0, z[1].Prop1.Length);
}
}
}
+10 -2
View File
@@ -337,8 +337,16 @@ namespace Newtonsoft.Json
case '\'':
ReadStringIntoBuffer(currentChar);
byte[] data = Convert.FromBase64CharArray(_buffer.GetInternalBuffer(), 0, _buffer.Position);
_buffer.Position = 0;
byte[] data;
if (_buffer.Position == 0)
{
data = new byte[0];
}
else
{
data = Convert.FromBase64CharArray(_buffer.GetInternalBuffer(), 0, _buffer.Position);
_buffer.Position = 0;
}
SetToken(JsonToken.Bytes, data);
+2 -1
View File
@@ -41,7 +41,8 @@ namespace Newtonsoft.Json.Linq
// attempt to convert possible base 64 string to bytes
if (TokenType == JsonToken.String)
{
byte[] data = Convert.FromBase64String((string)Value);
string s = (string) Value;
byte[] data = (s.Length == 0) ? new byte[0] : Convert.FromBase64String(s);
SetToken(JsonToken.Bytes, data);
}