[FFmpeg-devel] [PATCH 2/2] avcodec/cbs_vp9: Check data_size

James Almer jamrial at gmail.com
Thu Dec 26 03:49:47 EET 2019


On 12/25/2019 9:18 PM, Michael Niedermayer wrote:
> Fixes: out of array access
> Fixes: 19542/clusterfuzz-testcase-minimized-ffmpeg_BSF_TRACE_HEADERS_fuzzer-5659498341728256
> 
> Found-by: continuous fuzzing process https://github.com/google/oss-fuzz/tree/master/projects/ffmpeg
> Signed-off-by: Michael Niedermayer <michael at niedermayer.cc>
> ---
>  libavcodec/cbs_vp9.c | 3 +++
>  1 file changed, 3 insertions(+)
> 
> diff --git a/libavcodec/cbs_vp9.c b/libavcodec/cbs_vp9.c
> index 98730e03e3..ec82f11c76 100644
> --- a/libavcodec/cbs_vp9.c
> +++ b/libavcodec/cbs_vp9.c
> @@ -416,6 +416,9 @@ static int cbs_vp9_split_fragment(CodedBitstreamContext *ctx,
>      uint8_t superframe_header;
>      int err;
>  
> +    if (frag->data_size == 0)
> +        return AVERROR_INVALIDDATA;

cbs_h2645 and cbs_av1 return 0 when frag->data_size == 0, but cbs_jpeg
returns invalid data. I don't know which is more correct or ideal, but
if the failure doesn't happen here it will happen later in the process
when any code that finds out frag->nb_units is 0 will just bail out, so
LGTM.

> +
>      // Last byte in the packet.
>      superframe_header = frag->data[frag->data_size - 1];
>  
> 



More information about the ffmpeg-devel mailing list