diff options
author | Andreas Rheinhardt <andreas.rheinhardt@outlook.com> | 2021-03-17 15:20:45 +0100 |
---|---|---|
committer | Andreas Rheinhardt <andreas.rheinhardt@outlook.com> | 2022-08-23 12:21:00 +0200 |
commit | 3d4a5ef5c198b844cd38be7366957d3ea2354792 (patch) | |
tree | d4d42e332d4d78269b1463633a685622d317a022 | |
parent | a84087eaf8b806380dc8d50ea367816b12b99580 (diff) | |
download | ffmpeg-3d4a5ef5c198b844cd38be7366957d3ea2354792.tar.gz |
avcodec/pngdec: Use internal AVBPrint string when parsing chunks
One saves an allocation in case the string fits into the buffer.
Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
-rw-r--r-- | libavcodec/pngdec.c | 8 |
1 files changed, 3 insertions, 5 deletions
diff --git a/libavcodec/pngdec.c b/libavcodec/pngdec.c index 8a197d038d..189c3eee89 100644 --- a/libavcodec/pngdec.c +++ b/libavcodec/pngdec.c @@ -543,10 +543,8 @@ static int decode_text_chunk(PNGDecContext *s, GetByteContext *gb, int compresse return AVERROR_INVALIDDATA; if ((ret = decode_zbuf(&bp, data, data_end, s->avctx)) < 0) return ret; + text = bp.str; text_len = bp.len; - ret = av_bprint_finalize(&bp, (char **)&text); - if (ret < 0) - return ret; } else { text = (uint8_t *)data; text_len = data_end - text; @@ -554,8 +552,8 @@ static int decode_text_chunk(PNGDecContext *s, GetByteContext *gb, int compresse kw_utf8 = iso88591_to_utf8(keyword, keyword_end - keyword); txt_utf8 = iso88591_to_utf8(text, text_len); - if (text != data) - av_free(text); + if (compressed) + av_bprint_finalize(&bp, NULL); if (!(kw_utf8 && txt_utf8)) { av_free(kw_utf8); av_free(txt_utf8); |