Andreas Rheinhardt: > Michael Niedermayer: >> Fixes: reading over the end >> Fixes: >> 36346/clusterfuzz-testcase-minimized-ffmpeg_AV_CODEC_ID_ARGO_fuzzer-5366943107383296 >> >> Found-by: continuous fuzzing process >> https://github.com/google/oss-fuzz/tree/master/projects/ffmpeg >> Signed-off-by: Michael Niedermayer <mich...@niedermayer.cc> >> --- >> libavcodec/argo.c | 2 ++ >> 1 file changed, 2 insertions(+) >> >> diff --git a/libavcodec/argo.c b/libavcodec/argo.c >> index bbdb6ae15f..79a44d2583 100644 >> --- a/libavcodec/argo.c >> +++ b/libavcodec/argo.c >> @@ -116,6 +116,8 @@ static int decode_alcd(AVCodecContext *avctx, AVFrame >> *frame) >> int index; >> >> if (count == 0) { >> + if (bytestream2_get_bytes_left(gb) < 1) >> + return AVERROR_INVALIDDATA; >> codes = bytestream2_get_byteu(&sb); >> count = 8; >> } >> > Does the following also fix the issue? > > diff --git a/libavcodec/argo.c b/libavcodec/argo.c > > index bbdb6ae15f..602c042568 100644 > > --- a/libavcodec/argo.c > > +++ b/libavcodec/argo.c > > @@ -102,13 +102,14 @@ static int decode_alcd(AVCodecContext *avctx, > AVFrame *frame) > > uint8_t *dst = frame->data[0]; > > uint8_t codes = 0; > > int count = 0; > > + int num_codes = ((frame->width + 1) / 2 * (frame->height + 1) / 2 + > 7) >> 3; > > > > - if (bytestream2_get_bytes_left(gb) < 1024 + (((frame->width / 2) * > (frame->height / 2) + 7) >> 3)) > > + if (bytestream2_get_bytes_left(gb) < 1024 + num_codes) > > return AVERROR_INVALIDDATA; > > > > bytestream2_skipu(gb, 1024); > > sb = *gb; > > - bytestream2_skipu(gb, ((frame->width / 2) * (frame->height / 2) + > 7) >> 3); > > + bytestream2_skipu(gb, num_codes); > > > > for (int y = 0; y < frame->height; y += 2) { > > for (int x = 0; x < frame->width; x += 2) { > As can be seen from the above patch, my guess is that odd dimensions are the cause (because num_codes as above is the number of codes that is actually read); but my patch would not only change the criterion for when to error out, but also how much to skip (i.e. where the real data begins) and this makes me wonder whether we should not error out in this case (and ask for a sample).
- Andreas _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe".