THRIFT-1612 Base64 encoding is broken
Patch: Andrew Cox

git-svn-id: https://svn.apache.org/repos/asf/thrift/trunk@1343074 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/lib/csharp/src/Protocol/TBase64Utils.cs b/lib/csharp/src/Protocol/TBase64Utils.cs
index f857d6f..78c3767 100644
--- a/lib/csharp/src/Protocol/TBase64Utils.cs
+++ b/lib/csharp/src/Protocol/TBase64Utils.cs
@@ -34,10 +34,10 @@
 			{
 				dst[dstOff + 1] =
 					(byte)ENCODE_TABLE[
-						((src[srcOff] << 4) + (src[srcOff + 1] >> 4)) & 0x3F];
+						((src[srcOff] << 4) & 0x30) | ((src[srcOff + 1] >> 4) & 0x0F)];
 				dst[dstOff + 2] =
 					(byte)ENCODE_TABLE[
-						((src[srcOff + 1] << 2) + (src[srcOff + 2] >> 6)) & 0x3F];
+						((src[srcOff + 1] << 2) & 0x3C) | ((src[srcOff + 2] >> 6) & 0x03)];
 				dst[dstOff + 3] =
 					(byte)ENCODE_TABLE[src[srcOff + 2] & 0x3F];
 			}
@@ -45,15 +45,15 @@
 			{
 				dst[dstOff + 1] =
 					(byte)ENCODE_TABLE[
-						((src[srcOff] << 4) + (src[srcOff + 1] >> 4)) & 0x3F];
+						((src[srcOff] << 4) & 0x30) | ((src[srcOff + 1] >> 4) & 0x0F)];
 				dst[dstOff + 2] =
-					(byte)ENCODE_TABLE[(src[srcOff + 1] << 2) & 0x3F];
+					(byte)ENCODE_TABLE[(src[srcOff + 1] << 2) & 0x3C];
 
 			}
 			else
 			{ // len == 1) {
 				dst[dstOff + 1] =
-					(byte)ENCODE_TABLE[(src[srcOff] << 4) & 0x3F];
+					(byte)ENCODE_TABLE[(src[srcOff] << 4) & 0x30];
 			}
 		}