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.