summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAustin Kirk <askirk@umich.edu>2017-05-16 16:54:08 -0400
committerAustin Kirk <askirk@umich.edu>2017-05-16 16:54:08 -0400
commitae8a31b9356e0c4ccf6182251ff3a364c79dcf6e (patch)
tree6b9ce0adbe4fe870bab8415651b5f7b7dce37d57
parent16e520357c66207cfc375b116ec7c5f1c45b4492 (diff)
downloadsdl_android-ae8a31b9356e0c4ccf6182251ff3a364c79dcf6e.tar.gz
Change private member name, create function for checking bounds
-rw-r--r--sdl_android/src/main/java/com/smartdevicelink/trace/Mime.java104
1 files changed, 42 insertions, 62 deletions
diff --git a/sdl_android/src/main/java/com/smartdevicelink/trace/Mime.java b/sdl_android/src/main/java/com/smartdevicelink/trace/Mime.java
index fedf1af90..799ac98f4 100644
--- a/sdl_android/src/main/java/com/smartdevicelink/trace/Mime.java
+++ b/sdl_android/src/main/java/com/smartdevicelink/trace/Mime.java
@@ -3,8 +3,8 @@ package com.smartdevicelink.trace;
// Borrowed from Dave Boll's infamous SdlLinkRelay.java
public class Mime {
-
- private static String m_base64Chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
+
+ private static final String BASE_64_CHARS = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
/**
* @param str A String to encode into base64 String.
@@ -38,83 +38,63 @@ public class Mime {
/**
* @param bytesToEncode A byte array to encode into base64 String.
- * @param offset Offset to begin at
- * @param length Length to read
- * @return Base64 encoded String or a null String if input array is null.
+ * @param offset Offset to begin at
+ * @param length Length to read
+ * @return Base64 encoded String or a null String if input array is null or the input range is out of bounds.
*/
public static String base64Encode(byte bytesToEncode[], int offset, int length) {
- if(bytesToEncode == null){
+ if (bytesToEncode == null || bytesToEncode.length < length || bytesToEncode.length < offset + length) {
return null;
}
StringBuilder sb = new StringBuilder();
- int idxin = 0;
- int b64idx = 0;
-
- try {
-
- for (idxin = offset; idxin < offset + length; idxin++) {
- switch ((idxin - offset) % 3) {
- case 0:
- if(idxin >= 0 && idxin < bytesToEncode.length){
- b64idx = (bytesToEncode[idxin] >> 2) & 0x3f;
- }
- break;
- case 1:
- if(idxin >= 0 && idxin < bytesToEncode.length) {
- b64idx = (bytesToEncode[idxin] >> 4) & 0x0f;
- }
- if(idxin - 1 >= 0 && idxin - 1 < bytesToEncode.length) {
- b64idx |= ((bytesToEncode[idxin - 1] << 4) & 0x30);
- }
- break;
- case 2:
- if(idxin >= 0 && idxin < bytesToEncode.length) {
- b64idx = (bytesToEncode[idxin] >> 6) & 0x03;
- }
- if(idxin - 1 >= 0 && idxin - 1 < bytesToEncode.length) {
- b64idx |= ((bytesToEncode[idxin - 1] << 2) & 0x3c);
- }
- if(b64idx >= 0 && b64idx < m_base64Chars.length()) {
- sb.append(m_base64Chars.charAt(b64idx));
- }
- if(idxin >= 0 && idxin < bytesToEncode.length) {
- b64idx = bytesToEncode[idxin] & 0x3f;
- }
- break;
- }
- if(b64idx >= 0 && b64idx < m_base64Chars.length()) {
- sb.append(m_base64Chars.charAt(b64idx));
- }
- }
+ int idxin = 0;
+ int b64idx = 0;
+ for (idxin = offset; idxin < offset + length; idxin++) {
switch ((idxin - offset) % 3) {
case 0:
+ b64idx = (bytesToEncode[idxin] >> 2) & 0x3f;
break;
case 1:
- if(idxin - 1 >= 0 && idxin - 1 < m_base64Chars.length()) {
- b64idx = (bytesToEncode[idxin - 1] << 4) & 0x30;
- }
- if(b64idx >= 0 && b64idx < m_base64Chars.length()) {
- sb.append(m_base64Chars.charAt(b64idx));
- }
- sb.append("==");
+ b64idx = (bytesToEncode[idxin] >> 4) & 0x0f;
+ b64idx |= ((bytesToEncode[idxin - 1] << 4) & 0x30);
break;
case 2:
- if(idxin - 1 >= 0 && idxin - 1 < m_base64Chars.length()) {
- b64idx = ((bytesToEncode[idxin - 1] << 2) & 0x3c);
- }
- if(b64idx >= 0 && b64idx < m_base64Chars.length()) {
- sb.append(m_base64Chars.charAt(b64idx));
- }
- sb.append('=');
+ b64idx = (bytesToEncode[idxin] >> 6) & 0x03;
+ b64idx |= ((bytesToEncode[idxin - 1] << 2) & 0x3c);
+ sb.append(getBase64Char(b64idx));
+ b64idx = bytesToEncode[idxin] & 0x3f;
break;
}
+ sb.append(getBase64Char(b64idx));
+ }
- return sb.toString();
- }catch (ArrayIndexOutOfBoundsException e){
- return null;
+ switch ((idxin - offset) % 3) {
+ case 0:
+ break;
+ case 1:
+ b64idx = (bytesToEncode[idxin - 1] << 4) & 0x30;
+ sb.append(getBase64Char(b64idx));
+ sb.append("==");
+ break;
+ case 2:
+ b64idx = ((bytesToEncode[idxin - 1] << 2) & 0x3c);
+ sb.append(getBase64Char(b64idx));
+ sb.append('=');
+ break;
+ }
+
+ return sb.toString();
+
+ }
+
+ private static char getBase64Char(int b64idx){
+ if(b64idx >= 0 && b64idx < BASE_64_CHARS.length()) {
+ return BASE_64_CHARS.charAt(b64idx);
+ }else{
+ return 0x20;
}
}
} \ No newline at end of file