]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
Bug 9557 - Specifying the GetVar AMI action without a Channel parameter can
authorTilghman Lesher <tilghman@meg.abyt.es>
Thu, 19 Apr 2007 02:30:18 +0000 (02:30 +0000)
committerTilghman Lesher <tilghman@meg.abyt.es>
Thu, 19 Apr 2007 02:30:18 +0000 (02:30 +0000)
cause Asterisk to crash.  The reason this needs to be fixed in the functions
instead of in AMI is because Channel can legitimately be NULL, such as when
retrieving global variables.

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

funcs/func_callerid.c
funcs/func_cdr.c
funcs/func_groupcount.c
funcs/func_language.c
funcs/func_moh.c
funcs/func_timeout.c

index 264c404dd5fe62c2ca603266dc0f794e708eb45b..374d131337ced0d978e1d680aac2aa0e758bc780 100644 (file)
@@ -42,6 +42,9 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
 
 static char *callerid_read(struct ast_channel *chan, char *cmd, char *data, char *buf, size_t len) 
 {
+       if (!chan)
+               return "";
+
        if (!strncasecmp("all", data, 3)) {
                snprintf(buf, len, "\"%s\" <%s>", chan->cid.cid_name ? chan->cid.cid_name : "", chan->cid.cid_num ? chan->cid.cid_num : "");    
        } else if (!strncasecmp("name", data, 4)) {
@@ -73,9 +76,9 @@ static char *callerid_read(struct ast_channel *chan, char *cmd, char *data, char
 
 static void callerid_write(struct ast_channel *chan, char *cmd, char *data, const char *value) 
 {
-       if (!value)
+       if (!value || !chan)
                 return;
-       
+
        if (!strncasecmp("all", data, 3)) {
                char name[256];
                char num[256];
index fdd241894b6d6bf8ebef4a6fa911645b376a72a1..5ff3ffcf9ff76e0b85a8d068df3f97f2cc5d9e02 100644 (file)
@@ -44,7 +44,7 @@ static char *builtin_function_cdr_read(struct ast_channel *chan, char *cmd, char
        int argc;
        char *argv[2];
        int recursive = 0;
-       struct ast_cdr *cdr = chan->cdr;
+       struct ast_cdr *cdr = chan ? chan->cdr : NULL;
 
        if (ast_strlen_zero(data))
                return NULL;
@@ -78,9 +78,9 @@ static void builtin_function_cdr_write(struct ast_channel *chan, char *cmd, char
        char *argv[2];
        int recursive = 0;
 
-       if (ast_strlen_zero(data) || !value)
+       if (ast_strlen_zero(data) || !value || !chan)
                return;
-       
+
        mydata = ast_strdupa(data);
        argc = ast_app_separate_args(mydata, '|', argv, sizeof(argv) / sizeof(argv[0]));
 
index 0f07d832776611d42221d149a02397410005dbea..87bcdf4f5ea74c248663c620842506ce33746b64 100644 (file)
@@ -149,6 +149,9 @@ static char *group_list_function_read(struct ast_channel *chan, char *cmd, char
        char tmp1[1024] = "";
        char tmp2[1024] = "";
 
+       if (!chan)
+               return "";
+
        headp=&chan->varshead;
        AST_LIST_TRAVERSE(headp,current,entries) {
                if (!strncmp(ast_var_name(current), GROUP_CATEGORY_PREFIX "_", strlen(GROUP_CATEGORY_PREFIX) + 1)) {
index ea829a2f4497528bcc58ef2b10ea91021c299be1..eef732326e941e1996708d267109ef4b11effba9 100644 (file)
 
 static char *builtin_function_language_read(struct ast_channel *chan, char *cmd, char *data, char *buf, size_t len) 
 {
-       ast_copy_string(buf, chan->language, len);
+       ast_copy_string(buf, chan ? chan->language : "", len);
 
        return buf;
 }
 
 static void builtin_function_language_write(struct ast_channel *chan, char *cmd, char *data, const char *value) 
 {
-       if (value)
+       if (chan && value)
                ast_copy_string(chan->language, value, sizeof(chan->language));
 }
 
index 25aa73af7de09c7c5a36f7db3e0b9b6b8548fbc7..203a4332dc56fd8220a7aa5e648c331fbf26f0c7 100644 (file)
 
 static char *function_moh_read(struct ast_channel *chan, char *cmd, char *data, char *buf, size_t len)
 {
-       ast_copy_string(buf, chan->musicclass, len);
+       ast_copy_string(buf, chan ? chan->musicclass : "", len);
 
        return buf;
 }
 
 static void function_moh_write(struct ast_channel *chan, char *cmd, char *data, const char *value) 
 {
-       ast_copy_string(chan->musicclass, value, sizeof(chan->musicclass));
+       if (chan)
+               ast_copy_string(chan->musicclass, value, sizeof(chan->musicclass));
 }
 
 #ifndef BUILTIN_FUNC
index 5983617aa6c5be87024bd47de5445c5229c58eef..95490594e8016d204b0a45c673d205667085c91c 100644 (file)
@@ -42,6 +42,9 @@ static char *builtin_function_timeout_read(struct ast_channel *chan, char *cmd,
 {
        time_t myt;
 
+       if (!chan)
+               return "";
+
        if (!data) {
                ast_log(LOG_ERROR, "Must specify type of timeout to get.\n");
                 return NULL;
@@ -86,6 +89,9 @@ static void builtin_function_timeout_write(struct ast_channel *chan, char *cmd,
        char timestr[64];
        struct tm myt;
 
+       if (!chan)
+               return;
+
        if (!data) {
                ast_log(LOG_ERROR, "Must specify type of timeout to set.\n");
                return;