mirror of
https://github.com/asterisk/asterisk.git
synced 2025-09-24 06:53:41 +00:00
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:
@@ -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)) {
|
||||
|
@@ -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);
|
||||
|
@@ -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)) {
|
||||
|
@@ -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));
|
||||
}
|
||||
|
||||
|
@@ -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
|
||||
|
@@ -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;
|
||||
|
Reference in New Issue
Block a user