From: Kevin P. Fleming Date: Wed, 16 Nov 2005 18:21:10 +0000 (+0000) Subject: issue #5763 X-Git-Tag: 1.2.0~11 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=7953c3f407e7dea4381804743f5a1858df341c34;p=thirdparty%2Fasterisk.git issue #5763 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@7118 65c4cc65-6c06-0410-ace0-fbb531ad65f3 --- diff --git a/ChangeLog b/ChangeLog index f1e03b1158..1c988f3192 100755 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,7 @@ 2005-11-16 Kevin P. Fleming + * apps/app_forkcdr.c (forkcdr_exec): issue warning (and don't segfault) if ForkCDR is called on a channel that doesn't have a CDR (issue #5763) + * channel.c (ast_queue_hangup): ensure that the channel lock is held before changing its fields... (issue #5770) * res/res_musiconhold.c: don't spit out incorrect log messages (and leak memory) during reload (issue #5766) diff --git a/apps/app_forkcdr.c b/apps/app_forkcdr.c index 21073ff506..290c16850f 100755 --- a/apps/app_forkcdr.c +++ b/apps/app_forkcdr.c @@ -59,8 +59,7 @@ static void ast_cdr_fork(struct ast_channel *chan) struct ast_cdr *newcdr; struct ast_flags flags = { AST_CDR_FLAG_KEEP_VARS }; - if (!chan || !(cdr = chan->cdr)) - return; + cdr = chan->cdr; while (cdr->next) cdr = cdr->next; @@ -79,11 +78,18 @@ static void ast_cdr_fork(struct ast_channel *chan) static int forkcdr_exec(struct ast_channel *chan, void *data) { - int res=0; + int res = 0; struct localuser *u; + + if (!chan->cdr) { + ast_log(LOG_WARNING, "Channel does not have a CDR\n"); + return 0; + } + LOCAL_USER_ADD(u); + if (!ast_strlen_zero(data)) - ast_set2_flag(chan->cdr, strchr((char *)data, 'v'), AST_CDR_FLAG_KEEP_VARS); + ast_set2_flag(chan->cdr, strchr(data, 'v'), AST_CDR_FLAG_KEEP_VARS); ast_cdr_fork(chan);