]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
Merged revisions 61680 via svnmerge from
authorTilghman Lesher <tilghman@meg.abyt.es>
Thu, 19 Apr 2007 02:45:05 +0000 (02:45 +0000)
committerTilghman Lesher <tilghman@meg.abyt.es>
Thu, 19 Apr 2007 02:45:05 +0000 (02:45 +0000)
https://origsvn.digium.com/svn/asterisk/branches/1.2

........
r61680 | tilghman | 2007-04-18 21:30:18 -0500 (Wed, 18 Apr 2007) | 5 lines

Bug 9557 - Specifying the GetVar AMI action without a Channel parameter can
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.4@61681 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 6068739d44b6f6867af4681b765e681c1ef92559..be3026325b127caa9aec705232be200fc432856e 100644 (file)
@@ -43,7 +43,9 @@ static int callerid_read(struct ast_channel *chan, char *cmd, char *data,
 {
        char *opt = data;
 
-       /* XXX we are not always clearing the buffer. Is this correct ? */
+       if (!chan)
+               return -1;
+
        if (strchr(opt, '|')) {
                char name[80], num[80];
 
@@ -98,7 +100,7 @@ static int callerid_read(struct ast_channel *chan, char *cmd, char *data,
 static int callerid_write(struct ast_channel *chan, char *cmd, char *data,
                          const char *value)
 {
-       if (!value)
+       if (!value || !chan)
                return -1;
 
        if (!strncasecmp("all", data, 3)) {
index daed3c9b829d86345e5eaa5ec6fbf4bf83b65901..74d9eec86c3821c58799b6534f63315211689948 100644 (file)
@@ -57,7 +57,7 @@ static int cdr_read(struct ast_channel *chan, char *cmd, char *parse,
 {
        char *ret;
        struct ast_flags flags = { 0 };
-       struct ast_cdr *cdr = chan->cdr;
+       struct ast_cdr *cdr = chan ? chan->cdr : NULL;
        AST_DECLARE_APP_ARGS(args,
                             AST_APP_ARG(variable);
                             AST_APP_ARG(options);
@@ -94,7 +94,7 @@ static int cdr_write(struct ast_channel *chan, char *cmd, char *parse,
                             AST_APP_ARG(options);
        );
 
-       if (ast_strlen_zero(parse) || !value)
+       if (ast_strlen_zero(parse) || !value || !chan)
                return -1;
 
        AST_STANDARD_APP_ARGS(args, parse);
index ed96e34b0895b2978af805f151e8246c7c6078c0..d804e0c1d1e37e90d028bd5d8a1cbd5d87e71cd2 100644 (file)
@@ -157,6 +157,9 @@ static int group_list_function_read(struct ast_channel *chan, char *cmd,
        char tmp1[1024] = "";
        char tmp2[1024] = "";
 
+       if (!chan)
+               return -1;
+
        headp = &chan->varshead;
        AST_LIST_TRAVERSE(headp, current, entries) {
                if (!strncmp(ast_var_name(current), GROUP_CATEGORY_PREFIX "_", strlen(GROUP_CATEGORY_PREFIX) + 1)) {
index af6f9d0a9d676af4008a6422de0cb98466aec4bf..43b368f4f57876ae667a3b073ca2d13a82323497 100644 (file)
@@ -48,7 +48,7 @@ static int language_read(struct ast_channel *chan, char *cmd, char *data,
                                "LANGUAGE() is deprecated; use CHANNEL(language) instead.\n");
        }
 
-       ast_copy_string(buf, chan->language, len);
+       ast_copy_string(buf, chan ? chan->language : "", len);
 
        return 0;
 }
@@ -62,7 +62,7 @@ static int language_write(struct ast_channel *chan, char *cmd, char *data,
                                "LANGUAGE() is deprecated; use CHANNEL(language) instead.\n");
        }
 
-       if (value)
+       if (chan && value)
                ast_string_field_set(chan, language, value);
 
        return 0;
index c8e29a747ab3948c81995337675ec5575bb0af62..86701b161f35e4e51f5debe5c2694907613d3ad2 100644 (file)
@@ -46,7 +46,7 @@ static int moh_read(struct ast_channel *chan, char *cmd, char *data,
                ast_log(LOG_WARNING, "MUSICCLASS() is deprecated; use CHANNEL(musicclass) instead.\n");
        }
 
-       ast_copy_string(buf, chan->musicclass, len);
+       ast_copy_string(buf, chan ? chan->musicclass : "", len);
 
        return 0;
 }
@@ -59,7 +59,8 @@ static int moh_write(struct ast_channel *chan, char *cmd, char *data,
                ast_log(LOG_WARNING, "MUSICCLASS() is deprecated; use CHANNEL(musicclass) instead.\n");
        }
 
-       ast_string_field_set(chan, musicclass, value);
+       if (chan)
+               ast_string_field_set(chan, musicclass, value);
 
        return 0;
 }
index b88ae078f53b7345ffff6eeb341328e8027d9622..7d9d535ea0eb9c338760c97c7d8e52633982f5d5 100644 (file)
@@ -45,6 +45,9 @@ static int timeout_read(struct ast_channel *chan, char *cmd, char *data,
 {
        time_t myt;
 
+       if (!chan)
+               return -1;
+
        if (!data) {
                ast_log(LOG_ERROR, "Must specify type of timeout to get.\n");
                return -1;
@@ -90,6 +93,9 @@ static int timeout_write(struct ast_channel *chan, char *cmd, char *data,
        char timestr[64];
        struct tm myt;
 
+       if (!chan)
+               return -1;
+
        if (!data) {
                ast_log(LOG_ERROR, "Must specify type of timeout to set.\n");
                return -1;