Author: rmudgett
Date: Wed Nov 19 10:38:10 2014
New Revision: 428244

URL: http://svnview.digium.com/svn/asterisk?view=rev&rev=428244
Log:
ast_str: Fix improper member access to struct ast_str members.

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/

Modified:
    branches/11/channels/chan_sip.c
    branches/11/channels/sip/security_events.c
    branches/11/res/res_calendar.c

Modified: branches/11/channels/chan_sip.c
URL: 
http://svnview.digium.com/svn/asterisk/branches/11/channels/chan_sip.c?view=diff&rev=428244&r1=428243&r2=428244
==============================================================================
--- branches/11/channels/chan_sip.c (original)
+++ branches/11/channels/chan_sip.c Wed Nov 19 10:38:10 2014
@@ -9398,7 +9398,7 @@
        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;
@@ -9439,7 +9439,7 @@
                        lws = 0;
        }
        msgbuf[t] = '\0';
-       data->used = t;
+       ast_str_update(data);
 }
 
 /*! \brief Parse a SIP message
@@ -9447,7 +9447,7 @@
 */
 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;
@@ -13547,12 +13547,12 @@
 /*! \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)
@@ -13566,7 +13566,7 @@
        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);
@@ -13574,7 +13574,7 @@
                        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';
@@ -16374,7 +16374,7 @@
                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);
 
@@ -16700,7 +16700,7 @@
                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++) {

Modified: branches/11/channels/sip/security_events.c
URL: 
http://svnview.digium.com/svn/asterisk/branches/11/channels/sip/security_events.c?view=diff&rev=428244&r1=428243&r2=428244
==============================================================================
--- branches/11/channels/sip/security_events.c (original)
+++ branches/11/channels/sip/security_events.c Wed Nov 19 10:38:10 2014
@@ -324,7 +324,7 @@
                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);
 

Modified: branches/11/res/res_calendar.c
URL: 
http://svnview.digium.com/svn/asterisk/branches/11/res/res_calendar.c?view=diff&rev=428244&r1=428243&r2=428244
==============================================================================
--- branches/11/res/res_calendar.c (original)
+++ branches/11/res/res_calendar.c Wed Nov 19 10:38:10 2014
@@ -777,7 +777,7 @@
 
        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))) {


-- 
_____________________________________________________________________
-- Bandwidth and Colocation Provided by http://www.api-digital.com --

svn-commits mailing list
To UNSUBSCRIBE or update options visit:
   http://lists.digium.com/mailman/listinfo/svn-commits

Reply via email to