Fixed some bugs when encoding and decoding to base64.

This commit is contained in:
James Canete
2006-05-16 01:46:47 +00:00
parent 927c229a42
commit 91cfcd26b3

View File

@@ -413,7 +413,7 @@ char *base64_encode(xmpp_ctx_t *ctx,
case 1: case 1:
hextet = (buffer[len-1] & 0xFC) >> 2; hextet = (buffer[len-1] & 0xFC) >> 2;
*c++ = _base64_charmap[hextet]; *c++ = _base64_charmap[hextet];
hextet = (buffer[len-1] & 0x02) << 6; hextet = (buffer[len-1] & 0x03) << 4;
*c++ = _base64_charmap[hextet]; *c++ = _base64_charmap[hextet];
*c++ = _base64_charmap[64]; /* pad */ *c++ = _base64_charmap[64]; /* pad */
*c++ = _base64_charmap[64]; /* pad */ *c++ = _base64_charmap[64]; /* pad */
@@ -448,16 +448,16 @@ int base64_decoded_len(xmpp_ctx_t *ctx,
if (c < 64) nudge = 0; if (c < 64) nudge = 0;
else if (c == 64) { else if (c == 64) {
c = _base64_invcharmap[(int)buffer[len-2]]; c = _base64_invcharmap[(int)buffer[len-2]];
if (c < 64) nudge = 2; if (c < 64) nudge = 1;
else if (c == 64) { else if (c == 64) {
c = _base64_invcharmap[(int)buffer[len-3]]; c = _base64_invcharmap[(int)buffer[len-3]];
if (c < 64) nudge = 1; if (c < 64) nudge = 2;
} }
} }
if (nudge < 0) return 0; /* reject bad coding */ if (nudge < 0) return 0; /* reject bad coding */
/* decoded steam is 3 bytes for every four */ /* decoded steam is 3 bytes for every four */
return 3 * ((len + 3) >> 2) + nudge; return 3 * (len >> 2) - nudge;
} }
unsigned char *base64_decode(xmpp_ctx_t *ctx, unsigned char *base64_decode(xmpp_ctx_t *ctx,