channel: ast_write frame wrongly freed after call to audiohooks
authorKevin Harwell <kharwell@digium.com>
Mon, 5 Jun 2017 16:27:32 +0000 (11:27 -0500)
committerKevin Harwell <kharwell@digium.com>
Mon, 5 Jun 2017 16:27:32 +0000 (11:27 -0500)
commitd8802a6a0faa5c983dc93d022475994cd8dbb3c8
treeb6d8ed0a78325f79b08856dfb0fca910c487000a
parent0d0b1730af9bca5462504d2b90c1eaa9c78535d5
channel: ast_write frame wrongly freed after call to audiohooks

ASTERISK-26419 introduced a bug when calling ast_audiohook_write_list in
ast_write. It would free the frame given to ast_write if the frame returned
by ast_audiohook_write_list was different than the given one. The frame give
to ast_write should never be freed within that function. It is the caller's
resposibility to free the frame after writing (or when it its done with it).
By freeing it within ast_write this of course led to some memory corruption
problems.

This patch makes it so the frame given to ast_write is no longer freed within
the function. The frame returned by ast_audiohook_write_list is now subsequently
used in ast_write and is freed later. It is freed either after translate if the
frame returned by translate is different, or near the end of ast_write prior to
function exit.

ASTERISK-26973 #close

Change-Id: Ic9085ba5f555eeed12f6e565a638c3649695988b
main/channel.c