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
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)) {
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];
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;
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]));
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)) {
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));
}
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
{
time_t myt;
+ if (!chan)
+ return "";
+
if (!data) {
ast_log(LOG_ERROR, "Must specify type of timeout to get.\n");
return NULL;
char timestr[64];
struct tm myt;
+ if (!chan)
+ return;
+
if (!data) {
ast_log(LOG_ERROR, "Must specify type of timeout to set.\n");
return;