On 6/13/17 5:35 PM, Vittorio Giovara wrote: > Signed-off-by: Vittorio Giovara <[email protected]> > --- > libavcodec/dvbsubdec.c | 8 ++++++++ > 1 file changed, 8 insertions(+) > > diff --git a/libavcodec/dvbsubdec.c b/libavcodec/dvbsubdec.c > index 63523b765e..b97ff8027b 100644 > --- a/libavcodec/dvbsubdec.c > +++ b/libavcodec/dvbsubdec.c > @@ -1293,6 +1293,10 @@ static int dvbsub_display_end_segment(AVCodecContext > *avctx, const uint8_t *buf, > for (i = 0; i < sub->num_rects; i++) { > sub->rects[i] = av_mallocz(sizeof(*sub->rects[i])); > if (!sub->rects[i]) { > + int j; > + for (j = 0; j < i; j ++) > + av_free(sub->rects[j]); > + av_free(sub->rects); > return AVERROR(ENOMEM); > } > } > @@ -1335,6 +1339,8 @@ static int dvbsub_display_end_segment(AVCodecContext > *avctx, const uint8_t *buf, > > rect->data[1] = av_mallocz(AVPALETTE_SIZE); > if (!rect->data[1]) { > + for (i = 0; i < sub->num_rects; i++) > + av_free(sub->rects[i]); > av_free(sub->rects); > return AVERROR(ENOMEM); > } > @@ -1343,6 +1349,8 @@ static int dvbsub_display_end_segment(AVCodecContext > *avctx, const uint8_t *buf, > rect->data[0] = av_malloc(region->buf_size); > if (!rect->data[0]) { > av_free(rect->data[1]); > + for (i = 0; i < sub->num_rects; i++) > + av_free(sub->rects[i]); > av_free(sub->rects); > return AVERROR(ENOMEM); > } >
probably a free_subs() function or a goto fail might be better, in itself looks good. lu _______________________________________________ libav-devel mailing list [email protected] https://lists.libav.org/mailman/listinfo/libav-devel
