Fix dialplan function NULL channel safety issues

(closes issue ASTERISK-23391)
Reported by: Corey Farrell
Review: https://reviewboard.asterisk.org/r/3386/
........

Merged revisions 411313 from http://svn.asterisk.org/svn/asterisk/branches/1.8
........

Merged revisions 411314 from http://svn.asterisk.org/svn/asterisk/branches/11
........

Merged revisions 411315 from http://svn.asterisk.org/svn/asterisk/branches/12


git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@411328 65c4cc65-6c06-0410-ace0-fbb531ad65f3
This commit is contained in:
Corey Farrell
2014-03-27 19:21:44 +00:00
parent 44409401ec
commit fbe0dfaf44
31 changed files with 315 additions and 30 deletions

View File

@@ -1685,6 +1685,11 @@ static int calendar_event_read(struct ast_channel *chan, const char *cmd, char *
struct ast_datastore *datastore;
struct ast_calendar_event *event;
if (!chan) {
ast_log(LOG_WARNING, "No channel was provided to %s function.\n", cmd);
return -1;
}
if (ast_strlen_zero(data)) {
ast_log(LOG_WARNING, "%s requires an argument\n", cmd);
return -1;

View File

@@ -845,7 +845,7 @@ static int acf_jabberreceive_read(struct ast_channel *chan, const char *name, ch
start = ast_tvnow();
if (ast_autoservice_start(chan) < 0) {
if (chan && ast_autoservice_start(chan) < 0) {
ast_log(LOG_WARNING, "Cannot start autoservice for channel %s\n", ast_channel_name(chan));
ASTOBJ_UNREF(client, ast_aji_client_destroy);
return -1;
@@ -917,7 +917,7 @@ static int acf_jabberreceive_read(struct ast_channel *chan, const char *name, ch
}
ASTOBJ_UNREF(client, ast_aji_client_destroy);
if (ast_autoservice_stop(chan) < 0) {
if (chan && ast_autoservice_stop(chan) < 0) {
ast_log(LOG_WARNING, "Cannot stop autoservice for channel %s\n", ast_channel_name(chan));
}

View File

@@ -155,6 +155,11 @@ static int mute_channel(struct ast_channel *chan, const char *direction, int mut
/*! \brief Mute dialplan function */
static int func_mute_write(struct ast_channel *chan, const char *cmd, char *data, const char *value)
{
if (!chan) {
ast_log(LOG_WARNING, "No channel was provided to %s function.\n", cmd);
return -1;
}
return mute_channel(chan, data, ast_true(value));
}

View File

@@ -444,7 +444,7 @@ static int remove_header(void *obj)
static int func_read_header(struct ast_channel *chan, const char *function, char *data,
char *buf, size_t len)
{
struct ast_sip_channel_pvt *channel = ast_channel_tech_pvt(chan);
struct ast_sip_channel_pvt *channel = chan ? ast_channel_tech_pvt(chan) : NULL;
struct header_data header_data;
int number;
AST_DECLARE_APP_ARGS(args,
@@ -503,7 +503,7 @@ static int func_read_header(struct ast_channel *chan, const char *function, char
static int func_write_header(struct ast_channel *chan, const char *cmd, char *data,
const char *value)
{
struct ast_sip_channel_pvt *channel = ast_channel_tech_pvt(chan);
struct ast_sip_channel_pvt *channel = chan ? ast_channel_tech_pvt(chan) : NULL;
struct header_data header_data;
int header_number;
AST_DECLARE_APP_ARGS(args,

View File

@@ -2045,7 +2045,7 @@ static int acf_jabberreceive_read(struct ast_channel *chan, const char *name, ch
start = ast_tvnow();
if (ast_autoservice_start(chan) < 0) {
if (chan && ast_autoservice_start(chan) < 0) {
ast_log(LOG_WARNING, "Cannot start autoservice for channel %s\n", ast_channel_name(chan));
return -1;
}
@@ -2117,7 +2117,7 @@ static int acf_jabberreceive_read(struct ast_channel *chan, const char *name, ch
diff = ast_tvdiff_ms(ast_tvnow(), start);
}
if (ast_autoservice_stop(chan) < 0) {
if (chan && ast_autoservice_stop(chan) < 0) {
ast_log(LOG_WARNING, "Cannot stop autoservice for channel %s\n", ast_channel_name(chan));
}