Fix a double free issue with the Pickup dialplan application.
authorJoshua Colp <jcolp@digium.com>
Thu, 23 Apr 2009 16:55:48 +0000 (16:55 +0000)
committerJoshua Colp <jcolp@digium.com>
Thu, 23 Apr 2009 16:55:48 +0000 (16:55 +0000)
As part of the pickup process the connected line information is updated.
Part of this process does a shallow copy of the target channel's connected line
information to a local structure. Once complete the structure contents are freed.
As a result any information in the target channel's connected line information
structure is no longer valid. This change will now set the contents back to a clean
state so that the freeing of the target channel's connected line information structure
when the channel is destroyed will no longer try to double free things.

(closes issue #14839)
Reported by: lmsteffan

git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@190217 65c4cc65-6c06-0410-ace0-fbb531ad65f3

apps/app_directed_pickup.c

index cfba99f..5ce217d 100644 (file)
@@ -105,6 +105,7 @@ static int pickup_do(struct ast_channel *chan, struct ast_channel *target)
        ast_channel_unlock(chan);
        connected_caller.source = AST_CONNECTED_LINE_UPDATE_SOURCE_ANSWER;
        ast_channel_queue_connected_line_update(chan, &connected_caller);
+       ast_party_connected_line_init(&target->connected);
        ast_party_connected_line_free(&connected_caller);
 
        if ((res = ast_answer(chan))) {