Merged revisions 61681 via svnmerge from
authorTilghman Lesher <tilghman@meg.abyt.es>
Thu, 19 Apr 2007 02:51:21 +0000 (02:51 +0000)
committerTilghman Lesher <tilghman@meg.abyt.es>
Thu, 19 Apr 2007 02:51:21 +0000 (02:51 +0000)
https://origsvn.digium.com/svn/asterisk/branches/1.4

................
r61681 | tilghman | 2007-04-18 21:45:05 -0500 (Wed, 18 Apr 2007) | 13 lines

Merged revisions 61680 via svnmerge from
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/trunk@61682 65c4cc65-6c06-0410-ace0-fbb531ad65f3

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

index e026d67..c8fd1bb 100644 (file)
@@ -60,7 +60,9 @@ static int callerid_read(struct ast_channel *chan, const 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];
 
@@ -116,7 +118,7 @@ static int callerid_read(struct ast_channel *chan, const char *cmd, char *data,
 static int callerid_write(struct ast_channel *chan, const char *cmd, char *data,
                          const char *value)
 {
-       if (!value)
+       if (!value || !chan)
                return -1;
 
        if (!strncasecmp("all", data, 3)) {
index 4f1c457..951e980 100644 (file)
@@ -59,7 +59,7 @@ static int cdr_read(struct ast_channel *chan, const 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);
@@ -96,7 +96,7 @@ static int cdr_write(struct ast_channel *chan, const 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 2be3f83..fb7ec57 100644 (file)
@@ -158,6 +158,9 @@ static int group_list_function_read(struct ast_channel *chan, const 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 a400a95..1da11e5 100644 (file)
@@ -46,6 +46,9 @@ static int timeout_read(struct ast_channel *chan, const 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;
@@ -91,6 +94,9 @@ static int timeout_write(struct ast_channel *chan, const 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;