Uploaded image for project: 'Commons Codec'
  1. Commons Codec
  2. CODEC-68

isBase64 throws ArrayIndexOutOfBoundsException on some non-BASE64 bytes

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Closed
    • Major
    • Resolution: Duplicate
    • 1.3
    • 1.4
    • 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

      Attachments

        Activity

          People

            Unassigned Unassigned
            rrodewald Robert Rodewald
            Votes:
            0 Vote for this issue
            Watchers:
            0 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved:

              Time Tracking

                Estimated:
                Original Estimate - 0.25h
                0.25h
                Remaining:
                Remaining Estimate - 0.25h
                0.25h
                Logged:
                Time Spent - Not Specified
                Not Specified