diff options
| author | 2011-06-01 01:09:53 +0200 | |
|---|---|---|
| committer | 2011-06-01 01:09:53 +0200 | |
| commit | fde488d1b961f77f27a43cf8732b95ab65baf471 (patch) | |
| tree | c0d6d602906ad4ea535cd9f7797c2ae8f2eaa563 /src | |
| parent | bfd8c56c016d97e6845664c7bb2e9b0c65d8cb95 (diff) | |
| download | libplist-fde488d1b961f77f27a43cf8732b95ab65baf471.tar.gz libplist-fde488d1b961f77f27a43cf8732b95ab65baf471.tar.bz2 | |
Fix base64 encoding
Diffstat (limited to 'src')
| -rw-r--r-- | src/base64.c | 14 |
1 files changed, 6 insertions, 8 deletions
diff --git a/src/base64.c b/src/base64.c index 2326168..65c6061 100644 --- a/src/base64.c +++ b/src/base64.c | |||
| @@ -53,20 +53,18 @@ char *base64encode(const unsigned char *buf, size_t *size) | |||
| 53 | unsigned char input[3]; | 53 | unsigned char input[3]; |
| 54 | unsigned int output[4]; | 54 | unsigned int output[4]; |
| 55 | while (n < *size) { | 55 | while (n < *size) { |
| 56 | input[0] = buf[n++]; | 56 | input[0] = buf[n]; |
| 57 | input[1] = (n < *size) ? buf[n++] : 0; | 57 | input[1] = (n+1 < *size) ? buf[n+1] : 0; |
| 58 | input[2] = (n < *size) ? buf[n++] : 0; | 58 | input[2] = (n+2 < *size) ? buf[n+2] : 0; |
| 59 | output[0] = input[0] >> 2; | 59 | output[0] = input[0] >> 2; |
| 60 | output[1] = ((input[0] & 3) << 4) + (input[1] >> 4); | 60 | output[1] = ((input[0] & 3) << 4) + (input[1] >> 4); |
| 61 | output[2] = ((input[1] & 15) << 2) + (input[2] >> 6); | 61 | output[2] = ((input[1] & 15) << 2) + (input[2] >> 6); |
| 62 | output[3] = input[2] & 63; | 62 | output[3] = input[2] & 63; |
| 63 | outbuf[m++] = base64_str[(int)output[0]]; | 63 | outbuf[m++] = base64_str[(int)output[0]]; |
| 64 | outbuf[m++] = base64_str[(int)output[1]]; | 64 | outbuf[m++] = base64_str[(int)output[1]]; |
| 65 | outbuf[m++] = base64_str[(int)output[2]]; | 65 | outbuf[m++] = (n+1 < *size) ? base64_str[(int)output[2]] : base64_pad; |
| 66 | outbuf[m++] = base64_str[(int)output[3]]; | 66 | outbuf[m++] = (n+2 < *size) ? base64_str[(int)output[3]] : base64_pad; |
| 67 | } | 67 | n+=3; |
| 68 | while ((m % 4) != 0) { | ||
| 69 | outbuf[m++] = base64_pad; | ||
| 70 | } | 68 | } |
| 71 | outbuf[m] = 0; // 0-termination! | 69 | outbuf[m] = 0; // 0-termination! |
| 72 | *size = m; | 70 | *size = m; |
