X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=libavutil%2Fbase64.c;h=a1316b94381a67284888ab0b6e324773c0af4345;hb=41181bc4a01188c8f9b0366d77ddeed1e0845c53;hp=25ae8c411ce180518afc3699cd6dff785e8ea57f;hpb=c0a647644f2703e1da980dcf988cefd81528d8c9;p=ffmpeg diff --git a/libavutil/base64.c b/libavutil/base64.c index 25ae8c411ce..a1316b94381 100644 --- a/libavutil/base64.c +++ b/libavutil/base64.c @@ -79,12 +79,16 @@ static const uint8_t map2[256] = int av_base64_decode(uint8_t *out, const char *in_str, int out_size) { uint8_t *dst = out; - uint8_t *end = out + out_size; + uint8_t *end; // no sign extension const uint8_t *in = in_str; unsigned bits = 0xff; unsigned v; + if (!out) + goto validity_check; + + end = out + out_size; while (end - dst > 3) { BASE64_DEC_STEP(0); BASE64_DEC_STEP(1); @@ -108,6 +112,7 @@ int av_base64_decode(uint8_t *out, const char *in_str, int out_size) *dst++ = v; in += 4; } +validity_check: while (1) { BASE64_DEC_STEP(0); in++; @@ -126,7 +131,7 @@ out2: *dst++ = v >> 4; out1: out0: - return bits & 1 ? AVERROR_INVALIDDATA : dst - out; + return bits & 1 ? AVERROR_INVALIDDATA : out ? dst - out : 0; } /*****************************************************************************