char *pos;
const char *end = src + encoded_size;
unsigned char *target;
- size_t targsize;
if (encoded_size == (size_t)-1)
encoded_size = strlen(src);
- targsize = BASE64_MAX_DECODED_SIZE(encoded_size);
- target = para_malloc(targsize + 1);
+ target = para_malloc(BASE64_MAX_DECODED_SIZE(encoded_size) + 1);
state = 0;
tarindex = 0;
switch (state) {
case 0:
- if (tarindex >= targsize)
- goto fail;
target[tarindex] = (pos - Base64) << 2;
state = 1;
break;
case 1:
- if (tarindex + 1 >= targsize)
- goto fail;
target[tarindex] |= (pos - Base64) >> 4;
target[tarindex + 1] = ((pos - Base64) & 0x0f) << 4;
tarindex++;
state = 2;
break;
case 2:
- if (tarindex + 1 >= targsize)
- goto fail;
target[tarindex] |= (pos - Base64) >> 2;
target[tarindex + 1] = ((pos - Base64) & 0x03) << 6;
tarindex++;
state = 3;
break;
case 3:
- if (tarindex >= targsize)
- goto fail;
target[tarindex] |= pos - Base64;
tarindex++;
state = 0;