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.2@61680 65c4cc65-6c06-0410-ace0-fbb531ad65f3
This commit is contained in:
Tilghman Lesher
2007-04-19 02:30:18 +00:00
parent 062368a175
commit e4467b3837
6 changed files with 22 additions and 9 deletions

View 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,7 +76,7 @@ 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)) {

View 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,7 +78,7 @@ 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);

View 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)) {

View File

@@ -36,14 +36,14 @@
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));
}

View File

@@ -32,14 +32,15 @@
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

View 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;