]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
ast_str: Fix improper member access to struct ast_str members.
authorRichard Mudgett <rmudgett@digium.com>
Wed, 19 Nov 2014 16:56:30 +0000 (16:56 +0000)
committerRichard Mudgett <rmudgett@digium.com>
Wed, 19 Nov 2014 16:56:30 +0000 (16:56 +0000)
Accessing members of struct ast_str outside of the string manipulation API
routines is invalid since struct ast_str is supposed to be treated as
opaque.

Review: https://reviewboard.asterisk.org/r/4194/
........

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

git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/12@428245 65c4cc65-6c06-0410-ace0-fbb531ad65f3

channels/chan_sip.c
channels/sip/security_events.c
main/manager.c
res/res_calendar.c

index 90ef284efc78dcd7c5c0c70e087fcee41e3562a7..4049d1a4c0f6aa8495ff41c7528743137b8b98bd 100644 (file)
@@ -9575,7 +9575,7 @@ static unsigned int set_pvt_allowed_methods(struct sip_pvt *pvt, struct sip_requ
        This is enabled if pedanticsipchecking is enabled */
 static void lws2sws(struct ast_str *data)
 {
-       char *msgbuf = data->str;
+       char *msgbuf = ast_str_buffer(data);
        int len = ast_str_strlen(data);
        int h = 0, t = 0;
        int lws = 0;
@@ -9616,7 +9616,7 @@ static void lws2sws(struct ast_str *data)
                        lws = 0;
        }
        msgbuf[t] = '\0';
-       data->used = t;
+       ast_str_update(data);
 }
 
 /*! \brief Parse a SIP message
@@ -9624,7 +9624,7 @@ static void lws2sws(struct ast_str *data)
 */
 static int parse_request(struct sip_request *req)
 {
-       char *c = req->data->str;
+       char *c = ast_str_buffer(req->data);
        ptrdiff_t *dst = req->header;
        int i = 0, lim = SIP_MAX_HEADERS - 1;
        unsigned int skipping_headers = 0;
@@ -13694,12 +13694,12 @@ static int transmit_response_with_sdp(struct sip_pvt *p, const char *msg, const
 /*! \brief Parse first line of incoming SIP request */
 static int determine_firstline_parts(struct sip_request *req)
 {
-       char *e = ast_skip_blanks(req->data->str);      /* there shouldn't be any */
+       char *e = ast_skip_blanks(ast_str_buffer(req->data));   /* there shouldn't be any */
        char *local_rlpart1;
 
        if (!*e)
                return -1;
-       req->rlpart1 = e - req->data->str;      /* method or protocol */
+       req->rlpart1 = e - ast_str_buffer(req->data);   /* method or protocol */
        local_rlpart1 = e;
        e = ast_skip_nonblanks(e);
        if (*e)
@@ -13713,7 +13713,7 @@ static int determine_firstline_parts(struct sip_request *req)
        if (!strcasecmp(local_rlpart1, "SIP/2.0") ) { /* We have a response */
                if (strlen(e) < 3)      /* status code is 3 digits */
                        return -1;
-               req->rlpart2 = e - req->data->str;
+               req->rlpart2 = e - ast_str_buffer(req->data);
        } else { /* We have a request */
                if ( *e == '<' ) { /* XXX the spec says it must not be in <> ! */
                        ast_debug(3, "Oops. Bogus uri in <> %s\n", e);
@@ -13721,7 +13721,7 @@ static int determine_firstline_parts(struct sip_request *req)
                        if (!*e)
                                return -1;
                }
-               req->rlpart2 = e - req->data->str;      /* URI */
+               req->rlpart2 = e - ast_str_buffer(req->data);   /* URI */
                e = ast_skip_nonblanks(e);
                if (*e)
                        *e++ = '\0';
@@ -16716,7 +16716,7 @@ static enum check_auth_result check_auth(struct sip_pvt *p, struct sip_request *
                return AUTH_SECRET_FAILED; /*! XXX \todo need a better return code here */
        }
 
-       c = buf->str;
+       c = ast_str_buffer(buf);
 
        sip_digest_parser(c, keys);
 
@@ -17052,7 +17052,7 @@ static void transmit_fake_auth_response(struct sip_pvt *p, struct sip_request *r
                return;
        }
 
-       c = buf->str;
+       c = ast_str_buffer(buf);
 
        while (c && *(c = ast_skip_blanks(c))) { /* lookup for keys */
                for (i = keys; i->key != NULL; i++) {
index 990484eb58cef99a92a7da947bd40ec5cb71bcba..391a9ca0fcade79b1771ae80789ea72a3ec33808 100644 (file)
@@ -311,7 +311,7 @@ int sip_report_security_event(const struct sip_pvt *p, const struct sip_request
                authtoken = sip_get_header(req, reqheader);
                buf = ast_str_thread_get(&check_auth_buf, CHECK_AUTH_BUF_INITLEN);
                ast_str_set(&buf, 0, "%s", authtoken);
-               c = buf->str;
+               c = ast_str_buffer(buf);
 
                sip_digest_parser(c, keys);
 
index 1751927ab4e500d4d45f1f3b63e52cdd86580068..bd7c43369893ed82c66a6b7e04137171fd68cd9a 100644 (file)
@@ -1991,6 +1991,7 @@ static char *handle_showmancmd(struct ast_cli_entry *e, int cmd, struct ast_cli_
        struct manager_action *cur;
        struct ast_str *authority;
        int num, l, which;
+       const char *auth_str;
        char *ret = NULL;
 #ifdef AST_XML_DOCS
        char syntax_title[64], description_title[64], synopsis_title[64], seealso_title[64], arguments_title[64], privilege_title[64];
@@ -2035,7 +2036,7 @@ static char *handle_showmancmd(struct ast_cli_entry *e, int cmd, struct ast_cli_
        AST_RWLIST_TRAVERSE(&actions, cur, list) {
                for (num = 3; num < a->argc; num++) {
                        if (!strcasecmp(cur->action, a->argv[num])) {
-                               authority_to_str(cur->authority, &authority);
+                               auth_str = authority_to_str(cur->authority, &authority);
 
 #ifdef AST_XML_DOCS
                                if (cur->docsrc == AST_XML_DOC) {
@@ -2044,7 +2045,7 @@ static char *handle_showmancmd(struct ast_cli_entry *e, int cmd, struct ast_cli_
                                        char *description = ast_xmldoc_printable(S_OR(cur->description, "Not available"), 1);
                                        char *arguments = ast_xmldoc_printable(S_OR(cur->arguments, "Not available"), 1);
                                        char *seealso = ast_xmldoc_printable(S_OR(cur->seealso, "Not available"), 1);
-                                       char *privilege = ast_xmldoc_printable(S_OR(authority->str, "Not available"), 1);
+                                       char *privilege = ast_xmldoc_printable(S_OR(auth_str, "Not available"), 1);
                                        ast_cli(a->fd, "%s%s\n\n%s%s\n\n%s%s\n\n%s%s\n\n%s%s\n\n%s%s\n\n",
                                                syntax_title, syntax,
                                                synopsis_title, synopsis,
@@ -2057,7 +2058,7 @@ static char *handle_showmancmd(struct ast_cli_entry *e, int cmd, struct ast_cli_
                                {
                                        ast_cli(a->fd, "Action: %s\nSynopsis: %s\nPrivilege: %s\n%s\n",
                                                cur->action, cur->synopsis,
-                                               authority->str,
+                                               auth_str,
                                                S_OR(cur->description, ""));
                                }
                        }
index ae52cbfce798151a17fce0e06240af985c87e894..23328e3782cc5137128a1825725993b991773fb5 100644 (file)
@@ -789,7 +789,7 @@ static void *do_notify(void *data)
 
        for (itervar = event->owner->vars; itervar; itervar = itervar->next) {
                ast_str_substitute_variables(&tmpstr, 0, chan, itervar->value);
-               pbx_builtin_setvar_helper(chan, itervar->name, tmpstr->str);
+               pbx_builtin_setvar_helper(chan, itervar->name, ast_str_buffer(tmpstr));
        }
 
        if (!(apptext = ast_str_create(32))) {