Fix problem where Base64InputStream single-byte reads were unsigned.

Change-Id: Ibdfb77a283300baa61738fe98aa1c9f29eaf976f
http://b/3026478
diff --git a/core/java/android/util/Base64InputStream.java b/core/java/android/util/Base64InputStream.java
index da3911d..e9dac24 100644
--- a/core/java/android/util/Base64InputStream.java
+++ b/core/java/android/util/Base64InputStream.java
@@ -112,7 +112,7 @@
         if (outputStart >= outputEnd) {
             return -1;
         } else {
-            return coder.output[outputStart++];
+            return coder.output[outputStart++] & 0xff;
         }
     }
 
diff --git a/core/tests/coretests/src/android/util/Base64Test.java b/core/tests/coretests/src/android/util/Base64Test.java
index 0f5b090..53368d4 100644
--- a/core/tests/coretests/src/android/util/Base64Test.java
+++ b/core/tests/coretests/src/android/util/Base64Test.java
@@ -16,6 +16,9 @@
 
 package android.util;
 
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.Arrays;
 import junit.framework.TestCase;
 
 import java.io.ByteArrayInputStream;
@@ -404,6 +407,14 @@
         }
     }
 
+    /** http://b/3026478 */
+    public void testSingleByteReads() throws IOException {
+        InputStream in = new Base64InputStream(
+                new ByteArrayInputStream("/v8=".getBytes()), Base64.DEFAULT);
+        assertEquals(254, in.read());
+        assertEquals(255, in.read());
+    }
+
     /**
      * Tests that Base64OutputStream produces exactly the same results
      * as calling Base64.encode/.decode on an in-memory array.