base64_decode check dummies count for safety
parent
128e04b2ec
commit
82f66af3e2
15
src/base64.c
15
src/base64.c
|
|
@ -297,9 +297,7 @@ char *base64_decode_auto(struct base64_context *context, const char *src, \
|
||||||
|
|
||||||
memcpy(pBuff, src, nSrcLen);
|
memcpy(pBuff, src, nSrcLen);
|
||||||
memset(pBuff + nSrcLen, context->pad_ch, nPadLen);
|
memset(pBuff + nSrcLen, context->pad_ch, nPadLen);
|
||||||
|
|
||||||
base64_decode(context, pBuff, nNewLen, dest, dest_len);
|
base64_decode(context, pBuff, nNewLen, dest, dest_len);
|
||||||
|
|
||||||
if (pBuff != tmpBuff)
|
if (pBuff != tmpBuff)
|
||||||
{
|
{
|
||||||
free(pBuff);
|
free(pBuff);
|
||||||
|
|
@ -387,14 +385,21 @@ char *base64_decode(struct base64_context *context, const char *src, \
|
||||||
{
|
{
|
||||||
*dest = '\0';
|
*dest = '\0';
|
||||||
*dest_len = 0;
|
*dest_len = 0;
|
||||||
fprintf(stderr, "Input to decode not an even multiple of " \
|
fprintf(stderr, "Input to decode not an even multiple of "
|
||||||
"4 characters; pad with %c\n", context->pad_ch);
|
"4 characters; pad with %c\n", context->pad_ch);
|
||||||
return dest;
|
return dest;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (dummies > 2)
|
||||||
|
{
|
||||||
|
*dest = '\0';
|
||||||
|
*dest_len = 0;
|
||||||
|
fprintf(stderr, "pad char: %c count %d exceeds 2\n",
|
||||||
|
context->pad_ch, dummies);
|
||||||
|
return dest;
|
||||||
|
}
|
||||||
|
|
||||||
*dest_len = (pDest - dest) - dummies;
|
*dest_len = (pDest - dest) - dummies;
|
||||||
*(dest + (*dest_len)) = '\0';
|
*(dest + (*dest_len)) = '\0';
|
||||||
|
|
||||||
return dest;
|
return dest;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue