avcodec/cbs: Fix potential double-free when adding unit fails
authorAndreas Rheinhardt <andreas.rheinhardt@gmail.com>
Mon, 18 Nov 2019 07:47:58 +0000 (08:47 +0100)
committerMark Thompson <sw@jkqxz.net>
Sun, 9 Feb 2020 22:23:29 +0000 (22:23 +0000)
commitac5d5046c8ef4988b36734effe42a2fae8547ce1
treeda35e39aebdf8cf76f08ab4df6797e84a0c433fa
parent1e6cef686183288a50eb4e45265a3a7f7582b1b5
avcodec/cbs: Fix potential double-free when adding unit fails

ff_cbs_insert_unit_data() has two modes of operation: It can insert a
unit with a newly created reference to an already existing AVBuffer; or
it can take a buffer and create an AVBuffer for it. Said buffer will
then become owned by the unit lateron.

A potential memleak/double-free exists in the second case, because if
creating the AVBuffer fails, the function immediately returns, but when
it fails lateron, the supplied buffer will be freed. The caller has no
way to distinguish between these two outcomes. The only such caller
(cbs_jpeg_split_fragment() in cbs_jpeg.c) opted for a potential
double-free.

This commit changes this by explicitly stating that a non-refcounted
buffer will be freed on error. The aforementioned caller has been
brought in line with this.

Fixes CID 1452623.

Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@gmail.com>
libavcodec/cbs.c
libavcodec/cbs.h
libavcodec/cbs_jpeg.c