Details
-
Bug
-
Status: Closed
-
Major
-
Resolution: Duplicate
-
1.3
-
None
Description
the following code throws an ArrayIndexOutOfBoundsException although it is perfectly valid (the byte 0x9c should be ignored according to the standard):
byte[x] = new byte[] { 'n', 'A', '=', '=', 0x9c }; Base64.decodeBase64(x);
The problem is the following method:
private static boolean isBase64(byte octect) { if (octect == PAD) { return true; } else if (base64Alphabet[octect] == -1) { return false; } else { return true; } }
in Java octect is a signed value, so it is not correct to use it as an offset for an array [0..254] which base64Alphabet is. 0x9c is -100!
FIX:
use base64Alphabet[ 0xff & octect ] in the "else if" block to convert the octet prior using it as an offset for the lookup table