]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
core: Cleanup ast_get_hint() usage.
authorRichard Mudgett <rmudgett@digium.com>
Fri, 3 Mar 2017 03:27:00 +0000 (21:27 -0600)
committerRichard Mudgett <rmudgett@digium.com>
Fri, 3 Mar 2017 03:43:23 +0000 (21:43 -0600)
* 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

channels/chan_sip.c
main/manager.c
main/pbx.c

index 9a5d6c5e3a550c13ce0e992b78ef7169c95db372..a0d414483fc3b1e400ccd3b54ee8752a62cd701d 100644 (file)
@@ -18306,10 +18306,11 @@ static enum sip_get_dest_result get_destination(struct sip_pvt *p, struct sip_re
 
        /* If this is a subscription we actually just need to see if a hint exists for the extension */
        if (req->method == SIP_SUBSCRIBE) {
-               char hint[AST_MAX_EXTENSION];
                int which = 0;
-               if (ast_get_hint(hint, sizeof(hint), NULL, 0, NULL, p->context, uri) ||
-                   (ast_get_hint(hint, sizeof(hint), NULL, 0, NULL, p->context, decoded_uri) && (which = 1))) {
+
+               if (ast_get_hint(NULL, 0, NULL, 0, NULL, p->context, uri)
+                       || (ast_get_hint(NULL, 0, NULL, 0, NULL, p->context, decoded_uri)
+                               && (which = 1))) {
                        if (!oreq) {
                                ast_string_field_set(p, exten, which ? decoded_uri : uri);
                        }
index 00e8420c3097daad0d05e451493bf17b87ace7c2..b8dbb1a042598094a6e947153138e9cc027c1076 100644 (file)
@@ -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) {
index 5ac97aad4a146664570d316a44cf1236af86afb7..d648084d7b76de4152f3ed94ecab8bb563cf983a 100644 (file)
@@ -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;
                }
        }