From c02b93e70631bf28d10b74254572493dd941ee4f Mon Sep 17 00:00:00 2001 From: Matthew Jordan Date: Tue, 20 Aug 2013 01:21:25 +0000 Subject: [PATCH] Fix invalid access to disposed memory in main/data unit test It is not safe to iterate over a macro'd list of ao2 objects, deref them such that the item's destructor is called, and leave them in the list. The list macro to iterate over items requires the item to be a valid allocated object in order to proceed to the next item; with MALLOC_DEBUG on the corruption of the linked list is caught in the crash. This patch fixes the invalid access to free'd memory by removing the ao2 item from the list before de-refing it. Note that this is a backport of r396915 from Asterisk trunk. ........ Merged revisions 396958 from http://svn.asterisk.org/svn/asterisk/branches/1.8 git-svn-id: https://origsvn.digium.com/svn/asterisk/certified/branches/1.8.15@396971 65c4cc65-6c06-0410-ace0-fbb531ad65f3 --- main/data.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/main/data.c b/main/data.c index 9f7ef9a9da..dfe1117d6c 100644 --- a/main/data.c +++ b/main/data.c @@ -1631,7 +1631,7 @@ static void data_filter_destructor(void *obj) { struct data_filter *filter = obj, *globres; - AST_LIST_TRAVERSE(&(filter->glob_list), globres, list) { + while ((globres = AST_LIST_REMOVE_HEAD(&(filter->glob_list), list))) { ao2_ref(globres, -1); } -- 2.47.2