James Almer: > Speeds up the process considerably. > > Fixes ticket #8109. > > Suggested-by: nevcairiel > Suggested-by: cehoyos > Signed-off-by: James Almer <jamr...@gmail.com> > --- > libavformat/matroskadec.c | 12 ++++++++++-- > 1 file changed, 10 insertions(+), 2 deletions(-) > > diff --git a/libavformat/matroskadec.c b/libavformat/matroskadec.c > index 439ee462a5..0f227eb33d 100644 > --- a/libavformat/matroskadec.c > +++ b/libavformat/matroskadec.c > @@ -110,6 +110,7 @@ typedef const struct EbmlSyntax { > > typedef struct EbmlList { > int nb_elem; > + unsigned int alloc_elem_size; > void *elem; > } EbmlList; > > @@ -1236,8 +1237,14 @@ static int ebml_parse(MatroskaDemuxContext *matroska, > data = (char *) data + syntax->data_offset; > if (syntax->list_elem_size) { > EbmlList *list = data; > - void *newelem = av_realloc_array(list->elem, list->nb_elem + 1, > - syntax->list_elem_size); > + void *newelem; > + > + if ((unsigned)list->nb_elem + 1 >= UINT_MAX / > syntax->list_elem_size) > + return AVERROR(ENOMEM); > + > + newelem = av_fast_realloc(list->elem, > + &list->alloc_elem_size, > + (list->nb_elem + 1) * > syntax->list_elem_size); If this fails, list->alloc_elem_size will be zero, yet list->elem and list->nb_elem might be non NULL/zero. I actually think that this will probably work, but it is nevertheless ugly.
- 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".