Browse Source

Base64 conversion of userid:password was (always) broken. The length of

the result was calculated correctly, but was translating two bytes to four instead of three.  This would obviously cause buffer overruns.
PR: 34734


git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@278231 13f79535-47bb-0310-9956-ffa450edef68
master
Matthew Jason Benson 20 years ago
parent
commit
4ddc8483e0
1 changed files with 16 additions and 13 deletions
  1. +16
    -13
      src/main/org/apache/tools/ant/taskdefs/Get.java

+ 16
- 13
src/main/org/apache/tools/ant/taskdefs/Get.java View File

@@ -363,48 +363,51 @@ public class Get extends Task {
int bits24;
int bits6;

StringBuffer buf = new StringBuffer();
char[] out = new char[((octetString.length - 1) / 3 + 1) * 4];
int outIndex = 0;
int i = 0;

while ((i + 3) <= octetString.length) {
// store the octets
bits24 = (octetString[i++] & 0xFF) << 16;
bits24 |= (octetString[i++] & 0xFF) << 8;
bits24 |= octetString[i++];

bits6 = (bits24 & 0x00FC0000) >> 18;
buf.append(alphabet[bits6]);
out[outIndex++] = alphabet[bits6];
bits6 = (bits24 & 0x0003F000) >> 12;
buf.append(alphabet[bits6]);
out[outIndex++] = alphabet[bits6];
bits6 = (bits24 & 0x00000FC0) >> 6;
buf.append(alphabet[bits6]);
out[outIndex++] = alphabet[bits6];
bits6 = (bits24 & 0x0000003F);
buf.append(alphabet[bits6]);
out[outIndex++] = alphabet[bits6];
}
if (octetString.length - i == 2) {
// store the octets
bits24 = (octetString[i] & 0xFF) << 16;
bits24 |= (octetString[i + 1] & 0xFF) << 8;
bits6 = (bits24 & 0x00FC0000) >> 18;
buf.append(alphabet[bits6]);
out[outIndex++] = alphabet[bits6];
bits6 = (bits24 & 0x0003F000) >> 12;
buf.append(alphabet[bits6]);
out[outIndex++] = alphabet[bits6];
bits6 = (bits24 & 0x00000FC0) >> 6;
buf.append(alphabet[bits6]);
out[outIndex++] = alphabet[bits6];

// padding
buf.append('=');
out[outIndex++] = '=';
} else if (octetString.length - i == 1) {
// store the octets
bits24 = (octetString[i] & 0xFF) << 16;
bits6 = (bits24 & 0x00FC0000) >> 18;
buf.append(alphabet[bits6]);
out[outIndex++] = alphabet[bits6];
bits6 = (bits24 & 0x0003F000) >> 12;
buf.append(alphabet[bits6]);
out[outIndex++] = alphabet[bits6];

// padding
buf.append("==");
out[outIndex++] = '=';
out[outIndex++] = '=';
}
return buf.toString();
return new String(out);
}
}



Loading…
Cancel
Save