Re: [FFmpeg-devel] [PATCH 17/30] avcodec/j2kenc: Fix leaks on init failure

2020-09-15 Thread Paul B Mahol
On Tue, Sep 15, 2020 at 09:39:47AM +0200, Andreas Rheinhardt wrote:
> The JPEG2000 encoder did not clean up after itself on error.
> This commit fixes this by modifying the cleanup function to be able to
> handle only partially allocated structures and by setting the
> FF_CODEC_CAP_INIT_CLEANUP flag.
> 
> Signed-off-by: Andreas Rheinhardt 
> ---
>  libavcodec/j2kenc.c | 15 ++-
>  1 file changed, 10 insertions(+), 5 deletions(-)
> 

lgtm
___
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".

[FFmpeg-devel] [PATCH 17/30] avcodec/j2kenc: Fix leaks on init failure

2020-09-15 Thread Andreas Rheinhardt
The JPEG2000 encoder did not clean up after itself on error.
This commit fixes this by modifying the cleanup function to be able to
handle only partially allocated structures and by setting the
FF_CODEC_CAP_INIT_CLEANUP flag.

Signed-off-by: Andreas Rheinhardt 
---
 libavcodec/j2kenc.c | 15 ++-
 1 file changed, 10 insertions(+), 5 deletions(-)

diff --git a/libavcodec/j2kenc.c b/libavcodec/j2kenc.c
index 4cefe6d7fb..e3c5a32188 100644
--- a/libavcodec/j2kenc.c
+++ b/libavcodec/j2kenc.c
@@ -459,7 +459,7 @@ static int init_tiles(Jpeg2000EncoderContext *s)
 s->numXtiles = ff_jpeg2000_ceildiv(s->width, s->tile_width);
 s->numYtiles = ff_jpeg2000_ceildiv(s->height, s->tile_height);
 
-s->tile = av_malloc_array(s->numXtiles, s->numYtiles * 
sizeof(Jpeg2000Tile));
+s->tile = av_calloc(s->numXtiles, s->numYtiles * sizeof(Jpeg2000Tile));
 if (!s->tile)
 return AVERROR(ENOMEM);
 for (tileno = 0, tiley = 0; tiley < s->numYtiles; tiley++)
@@ -1495,12 +1495,16 @@ static void cleanup(Jpeg2000EncoderContext *s)
 int tileno, compno;
 Jpeg2000CodingStyle *codsty = &s->codsty;
 
+if (!s->tile)
+return;
 for (tileno = 0; tileno < s->numXtiles * s->numYtiles; tileno++){
-for (compno = 0; compno < s->ncomponents; compno++){
-Jpeg2000Component *comp = s->tile[tileno].comp + compno;
-ff_jpeg2000_cleanup(comp, codsty);
+if (s->tile[tileno].comp) {
+for (compno = 0; compno < s->ncomponents; compno++){
+Jpeg2000Component *comp = s->tile[tileno].comp + compno;
+ff_jpeg2000_cleanup(comp, codsty);
+}
+av_freep(&s->tile[tileno].comp);
 }
-av_freep(&s->tile[tileno].comp);
 av_freep(&s->tile[tileno].layer_rates);
 }
 av_freep(&s->tile);
@@ -1853,4 +1857,5 @@ AVCodec ff_jpeg2000_encoder = {
 AV_PIX_FMT_NONE
 },
 .priv_class = &j2k_class,
+.caps_internal  = FF_CODEC_CAP_INIT_CLEANUP,
 };
-- 
2.25.1

___
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".