roken: base64: set errno on decode errors

This commit is contained in:
Nicolas Williams
2019-11-18 15:53:45 -06:00
parent a8b749685c
commit 4981cfc420

View File

@@ -132,13 +132,19 @@ rk_base64_decode(const char *str, void *data)
for (p = str; *p && (*p == '=' || strchr(base64_chars, *p)); p += 4) {
unsigned int val = token_decode(p);
unsigned int marker = (val >> 24) & 0xff;
if (val == DECODE_ERROR)
if (val == DECODE_ERROR) {
errno = EINVAL;
return -1;
}
*q++ = (val >> 16) & 0xff;
if (marker < 2)
*q++ = (val >> 8) & 0xff;
if (marker < 1)
*q++ = val & 0xff;
}
if (q - (unsigned char *) data > INT_MAX) {
errno = EOVERFLOW;
return -1;
}
return q - (unsigned char *) data;
}