mirror of
https://github.com/asterisk/asterisk.git
synced 2025-11-15 06:18:38 +00:00
Fix Segfault When Syntax Of A Line Under [applicationmap] Is Invalid
When processing the lines under the [applicationmap] context in features.conf, a
segfault occurs from attempting to process a line with an invalid syntax
(basically missing most of the arguments).
Example:
[applicationmap]
automon=*6
* This patch moves the checking for empty arguments to before they are accessed.
* Also, checked the "todo" comment and removed it. Some applications do not
require arguments.
(closes issue ASTERISK-22416)
Reported by: CGI.NET
Tested by: CGI.NET
Patches:
asterisk-22416-check-syntax-first_v2.diff by Michael L. Young (license 5026)
Review: https://reviewboard.asterisk.org/r/2803
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.8@399304 65c4cc65-6c06-0410-ace0-fbb531ad65f3
This commit is contained in:
@@ -5733,19 +5733,9 @@ static void process_applicationmap_line(struct ast_variable *var)
|
|||||||
);
|
);
|
||||||
|
|
||||||
AST_STANDARD_APP_ARGS(args, tmp_val);
|
AST_STANDARD_APP_ARGS(args, tmp_val);
|
||||||
if ((new_syn = strchr(args.app, '('))) {
|
|
||||||
/* New syntax */
|
|
||||||
args.moh_class = args.app_args;
|
|
||||||
args.app_args = new_syn;
|
|
||||||
*args.app_args++ = '\0';
|
|
||||||
if (args.app_args[strlen(args.app_args) - 1] == ')') {
|
|
||||||
args.app_args[strlen(args.app_args) - 1] = '\0';
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
activateon = strsep(&args.activatedby, "/");
|
activateon = strsep(&args.activatedby, "/");
|
||||||
|
|
||||||
/*! \todo XXX var_name or app_args ? */
|
|
||||||
if (ast_strlen_zero(args.app)
|
if (ast_strlen_zero(args.app)
|
||||||
|| ast_strlen_zero(args.exten)
|
|| ast_strlen_zero(args.exten)
|
||||||
|| ast_strlen_zero(activateon)
|
|| ast_strlen_zero(activateon)
|
||||||
@@ -5756,6 +5746,16 @@ static void process_applicationmap_line(struct ast_variable *var)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ((new_syn = strchr(args.app, '('))) {
|
||||||
|
/* New syntax */
|
||||||
|
args.moh_class = args.app_args;
|
||||||
|
args.app_args = new_syn;
|
||||||
|
*args.app_args++ = '\0';
|
||||||
|
if (args.app_args[strlen(args.app_args) - 1] == ')') {
|
||||||
|
args.app_args[strlen(args.app_args) - 1] = '\0';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
AST_RWLIST_RDLOCK(&feature_list);
|
AST_RWLIST_RDLOCK(&feature_list);
|
||||||
if (find_dynamic_feature(var->name)) {
|
if (find_dynamic_feature(var->name)) {
|
||||||
AST_RWLIST_UNLOCK(&feature_list);
|
AST_RWLIST_UNLOCK(&feature_list);
|
||||||
|
|||||||
Reference in New Issue
Block a user