diff options
author | Richard Mudgett <rmudgett@digium.com> | 2017-03-02 21:27:00 -0600 |
---|---|---|
committer | Richard Mudgett <rmudgett@digium.com> | 2017-03-02 21:43:23 -0600 |
commit | 4271c700f747f40dd2f46f1f868cfb89d1cf78f8 (patch) | |
tree | 99168b3ce764adff124b5d06b5c62c4ae0336e14 /main | |
parent | 75ebd8f0d2cdd146ab071391334ec7106ff29e94 (diff) |
core: Cleanup ast_get_hint() usage.
* manager.c:manager_state_cb() Fix potential use of uninitialized hint[]
if a hint does not exist for the requested extension. Ran into this when
developing a testsuite test. The AMI event ExtensionStatus came out with
the hint header value containing garbage. The AMI event PresenceStatus
also had the same issue.
* manager.c:action_extensionstate() no need to completely initialize the
hint[]. Only initialize the first element.
* pbx.c:ast_add_hint() Remove unnecessary assignment.
* chan_sip.c: Eliminate an unneeded hint[] local variable. We only care
about the return value of ast_get_hint() there.
Change-Id: Ia9a8786f01f93f1f917200f0a50bead0319af97b
Diffstat (limited to 'main')
-rw-r--r-- | main/manager.c | 24 | ||||
-rw-r--r-- | main/pbx.c | 1 |
2 files changed, 14 insertions, 11 deletions
diff --git a/main/manager.c b/main/manager.c index 00e8420c3..b8dbb1a04 100644 --- a/main/manager.c +++ b/main/manager.c @@ -5646,8 +5646,9 @@ static int action_extensionstate(struct mansession *s, const struct message *m) { const char *exten = astman_get_header(m, "Exten"); const char *context = astman_get_header(m, "Context"); - char hint[256] = ""; + char hint[256]; int status; + if (ast_strlen_zero(exten)) { astman_send_error(s, m, "Extension not specified"); return 0; @@ -5656,16 +5657,18 @@ static int action_extensionstate(struct mansession *s, const struct message *m) context = "default"; } status = ast_extension_state(NULL, context, exten); - ast_get_hint(hint, sizeof(hint) - 1, NULL, 0, NULL, context, exten); + hint[0] = '\0'; + ast_get_hint(hint, sizeof(hint), NULL, 0, NULL, context, exten); astman_start_ack(s, m); - astman_append(s, "Message: Extension Status\r\n" - "Exten: %s\r\n" - "Context: %s\r\n" - "Hint: %s\r\n" - "Status: %d\r\n" - "StatusText: %s\r\n\r\n", - exten, context, hint, status, - ast_extension_state2str(status)); + astman_append(s, "Message: Extension Status\r\n" + "Exten: %s\r\n" + "Context: %s\r\n" + "Hint: %s\r\n" + "Status: %d\r\n" + "StatusText: %s\r\n" + "\r\n", + exten, context, hint, status, + ast_extension_state2str(status)); return 0; } @@ -6951,6 +6954,7 @@ static int manager_state_cb(char *context, char *exten, struct ast_state_cb_info /* Notify managers of change */ char hint[512]; + hint[0] = '\0'; ast_get_hint(hint, sizeof(hint), NULL, 0, NULL, context, exten); switch(info->reason) { diff --git a/main/pbx.c b/main/pbx.c index 5ac97aad4..d648084d7 100644 --- a/main/pbx.c +++ b/main/pbx.c @@ -3921,7 +3921,6 @@ static int ast_add_hint(struct ast_exten *e) hint_new->last_presence_state = presence_state; hint_new->last_presence_subtype = subtype; hint_new->last_presence_message = message; - message = subtype = NULL; } } |