فهرست منبع

Optimize FromBase64String to return Empty when presented with an empty string.

This fixes issue 61.
Jon Skeet 12 سال پیش
والد
کامیت
dc8149fc64
2فایلهای تغییر یافته به همراه20 افزوده شده و 1 حذف شده
  1. 17 0
      src/ProtocolBuffers.Test/ByteStringTest.cs
  2. 3 1
      src/ProtocolBuffers/ByteString.cs

+ 17 - 0
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(""));
+        }
     }
 }

+ 3 - 1
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>