47static unsigned char *
b64_decode(
const char * data,
size_t * out_len) {
50 static const int b64_decode_table[] = {-1,
313 size_t in_len = strlen(data);
318 *out_len = in_len / 4 * 3;
319 if (data[in_len - 1] ==
'=')
321 if (data[in_len - 2] ==
'=')
324 unsigned char * out = (
unsigned char *)malloc(*out_len);
329 for (
size_t i = 0, j = 0; i < in_len;) {
330 int sextet_a = b64_decode_table[(
unsigned char)data[i++]];
331 int sextet_b = b64_decode_table[(
unsigned char)data[i++]];
332 int sextet_c = b64_decode_table[(
unsigned char)data[i++]];
333 int sextet_d = b64_decode_table[(
unsigned char)data[i++]];
336 if (sextet_a == -1 || sextet_b == -1 || (data[i - 2] !=
'=' && sextet_c == -1) ||
337 (data[i - 1] !=
'=' && sextet_d == -1)) {
343 unsigned int triple = (sextet_a << 3 * 6) + (sextet_b << 2 * 6) + (sextet_c << 1 * 6) + (sextet_d << 0 * 6);
347 out[j++] = (triple >> 2 * 8) & 0xFF;
349 out[j++] = (triple >> 1 * 8) & 0xFF;
351 out[j++] = (triple >> 0 * 8) & 0xFF;
static unsigned char * b64_decode(const char *data, size_t *out_len)
Definition fuzz_regression_helpers.h:47