[ https://issues.apache.org/jira/browse/CODEC-68?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Henri Yandell closed CODEC-68. ------------------------------ Resolution: Duplicate The relevant line of code has already been changed to: } else if (octect < 0 || base64Alphabet[octect] == -1) { Thus it no longer gets an exception and is ignored. > isBase64 throws ArrayIndexOutOfBoundsException on some non-BASE64 bytes > ----------------------------------------------------------------------- > > Key: CODEC-68 > URL: https://issues.apache.org/jira/browse/CODEC-68 > Project: Commons Codec > Issue Type: Bug > Affects Versions: 1.3 > Reporter: Robert Rodewald > Fix For: 1.4 > > Original Estimate: 0.25h > Remaining Estimate: 0.25h > > the following code throws an ArrayIndexOutOfBoundsException although it is > perfectly valid (the byte 0x9c should be ignored according to the standard): > {code} > byte[x] = new byte[] { 'n', 'A', '=', '=', 0x9c }; > Base64.decodeBase64(x); > {code} > The problem is the following method: > {code} > private static boolean isBase64(byte octect) { > if (octect == PAD) { > return true; > } else if (base64Alphabet[octect] == -1) { > return false; > } else { > return true; > } > } > {code} > 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 -- This message is automatically generated by JIRA. - You can reply to this email to add a comment to the issue online.