diff options
author | Jon Skeet <skeet@pobox.com> | 2013-08-13 15:14:17 +0100 |
---|---|---|
committer | Jon Skeet <skeet@pobox.com> | 2013-08-13 15:14:17 +0100 |
commit | dc8149fc64e589baed39022a08c882c8b19e3094 (patch) | |
tree | 5c54b2c7a887515c359270e4fc8cf8b298b654de | |
parent | f86edcbb46c7776099b36130ad19f10a2e92e186 (diff) | |
download | protobuf-dc8149fc64e589baed39022a08c882c8b19e3094.tar.gz protobuf-dc8149fc64e589baed39022a08c882c8b19e3094.tar.bz2 protobuf-dc8149fc64e589baed39022a08c882c8b19e3094.zip |
Optimize FromBase64String to return Empty when presented with an empty string.
This fixes issue 61.
-rw-r--r-- | src/ProtocolBuffers.Test/ByteStringTest.cs | 17 | ||||
-rw-r--r-- | src/ProtocolBuffers/ByteString.cs | 4 |
2 files changed, 20 insertions, 1 deletions
diff --git a/src/ProtocolBuffers.Test/ByteStringTest.cs b/src/ProtocolBuffers.Test/ByteStringTest.cs index 97425fe8..003307ae 100644 --- a/src/ProtocolBuffers.Test/ByteStringTest.cs +++ b/src/ProtocolBuffers.Test/ByteStringTest.cs @@ -34,6 +34,7 @@ #endregion
+using System;
using System.Text;
using Microsoft.VisualStudio.TestTools.UnitTesting;
@@ -127,5 +128,21 @@ namespace Google.ProtocolBuffers ByteString bs = ByteString.CopyFrom("\u20ac", Encoding.Unicode);
Assert.AreEqual("\u20ac", bs.ToString(Encoding.Unicode));
}
+
+ [TestMethod]
+ public void FromBase64_WithText()
+ {
+ byte[] data = new byte[] {0, 1, 2, 3, 4, 5, 6};
+ string base64 = Convert.ToBase64String(data);
+ ByteString bs = ByteString.FromBase64(base64);
+ TestUtil.AssertBytesEqual(data, bs.ToByteArray());
+ }
+
+ [TestMethod]
+ public void FromBase64_Empty()
+ {
+ // Optimization which also fixes issue 61.
+ Assert.AreSame(ByteString.Empty, ByteString.FromBase64(""));
+ }
}
}
\ No newline at end of file diff --git a/src/ProtocolBuffers/ByteString.cs b/src/ProtocolBuffers/ByteString.cs index 8b7bd06c..434865b7 100644 --- a/src/ProtocolBuffers/ByteString.cs +++ b/src/ProtocolBuffers/ByteString.cs @@ -129,7 +129,9 @@ namespace Google.ProtocolBuffers /// </summary>
public static ByteString FromBase64(string bytes)
{
- return new ByteString(Convert.FromBase64String(bytes));
+ // By handling the empty string explicitly, we not only optimize but we fix a
+ // problem on CF 2.0. See issue 61 for details.
+ return bytes == "" ? Empty : new ByteString(Convert.FromBase64String(bytes));
}
/// <summary>
|