Use a properly allocated channel for substitution in cdr_manager.
authorSean Bright <sean@malleable.com>
Tue, 26 May 2009 12:14:14 +0000 (12:14 +0000)
committerSean Bright <sean@malleable.com>
Tue, 26 May 2009 12:14:14 +0000 (12:14 +0000)
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@196622 65c4cc65-6c06-0410-ace0-fbb531ad65f3

cdr/cdr_manager.c

index 8a4a43e..aff60d3 100644 (file)
@@ -127,7 +127,6 @@ static int manager_log(struct ast_cdr *cdr)
        char strAnswerTime[80] = "";
        char strEndTime[80] = "";
        char buf[CUSTOM_FIELDS_BUF_SIZE];
-       struct ast_channel dummy;
 
        if (!enablecdr)
                return 0;
@@ -146,9 +145,14 @@ static int manager_log(struct ast_cdr *cdr)
        buf[0] = 0;
        /* Custom fields handling */
        if (customfields != NULL && ast_str_strlen(customfields)) {
-               memset(&dummy, 0, sizeof(dummy));
-               dummy.cdr = cdr;
-               pbx_substitute_variables_helper(&dummy, ast_str_buffer(customfields), buf, sizeof(buf) - 1);
+               struct ast_channel *dummy = ast_channel_alloc(0, 0, "", "", "", "", "", 0, "Substitution/%p", cdr);
+               if (!dummy) {
+                       ast_log(LOG_ERROR, "Unable to allocate channel for variable substitution.\n");
+                       return 0;
+               }
+               dummy->cdr = ast_cdr_dup(cdr);
+               pbx_substitute_variables_helper(dummy, ast_str_buffer(customfields), buf, sizeof(buf) - 1);
+               ast_channel_release(dummy);
        }
 
        manager_event(EVENT_FLAG_CDR, "Cdr",