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/
........

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

Merged revisions 428245 from http://svn.asterisk.org/svn/asterisk/branches/12
........

Merged revisions 428246 from http://svn.asterisk.org/svn/asterisk/branches/13


git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@428255 65c4cc65-6c06-0410-ace0-fbb531ad65f3
This commit is contained in:
Richard Mudgett
2014-11-19 17:22:29 +00:00
parent 7f8b7ace72
commit a7c9f4c668
4 changed files with 15 additions and 14 deletions

View File

@@ -9589,7 +9589,7 @@ static unsigned int set_pvt_allowed_methods(struct sip_pvt *pvt, struct sip_requ
This is enabled if pedanticsipchecking is enabled */ This is enabled if pedanticsipchecking is enabled */
static void lws2sws(struct ast_str *data) static void lws2sws(struct ast_str *data)
{ {
char *msgbuf = data->str; char *msgbuf = ast_str_buffer(data);
int len = ast_str_strlen(data); int len = ast_str_strlen(data);
int h = 0, t = 0; int h = 0, t = 0;
int lws = 0; int lws = 0;
@@ -9630,7 +9630,7 @@ static void lws2sws(struct ast_str *data)
lws = 0; lws = 0;
} }
msgbuf[t] = '\0'; msgbuf[t] = '\0';
data->used = t; ast_str_update(data);
} }
/*! \brief Parse a SIP message /*! \brief Parse a SIP message
@@ -9638,7 +9638,7 @@ static void lws2sws(struct ast_str *data)
*/ */
static int parse_request(struct sip_request *req) 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; ptrdiff_t *dst = req->header;
int i = 0, lim = SIP_MAX_HEADERS - 1; int i = 0, lim = SIP_MAX_HEADERS - 1;
unsigned int skipping_headers = 0; unsigned int skipping_headers = 0;
@@ -13715,12 +13715,12 @@ static int transmit_response_with_sdp(struct sip_pvt *p, const char *msg, const
/*! \brief Parse first line of incoming SIP request */ /*! \brief Parse first line of incoming SIP request */
static int determine_firstline_parts(struct sip_request *req) 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; char *local_rlpart1;
if (!*e) if (!*e)
return -1; 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; local_rlpart1 = e;
e = ast_skip_nonblanks(e); e = ast_skip_nonblanks(e);
if (*e) if (*e)
@@ -13734,7 +13734,7 @@ static int determine_firstline_parts(struct sip_request *req)
if (!strcasecmp(local_rlpart1, "SIP/2.0") ) { /* We have a response */ if (!strcasecmp(local_rlpart1, "SIP/2.0") ) { /* We have a response */
if (strlen(e) < 3) /* status code is 3 digits */ if (strlen(e) < 3) /* status code is 3 digits */
return -1; return -1;
req->rlpart2 = e - req->data->str; req->rlpart2 = e - ast_str_buffer(req->data);
} else { /* We have a request */ } else { /* We have a request */
if ( *e == '<' ) { /* XXX the spec says it must not be in <> ! */ if ( *e == '<' ) { /* XXX the spec says it must not be in <> ! */
ast_debug(3, "Oops. Bogus uri in <> %s\n", e); ast_debug(3, "Oops. Bogus uri in <> %s\n", e);
@@ -13742,7 +13742,7 @@ static int determine_firstline_parts(struct sip_request *req)
if (!*e) if (!*e)
return -1; return -1;
} }
req->rlpart2 = e - req->data->str; /* URI */ req->rlpart2 = e - ast_str_buffer(req->data); /* URI */
e = ast_skip_nonblanks(e); e = ast_skip_nonblanks(e);
if (*e) if (*e)
*e++ = '\0'; *e++ = '\0';
@@ -16554,7 +16554,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 */ 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); sip_digest_parser(c, keys);
@@ -16893,7 +16893,7 @@ static void transmit_fake_auth_response(struct sip_pvt *p, struct sip_request *r
return; return;
} }
c = buf->str; c = ast_str_buffer(buf);
while (c && *(c = ast_skip_blanks(c))) { /* lookup for keys */ while (c && *(c = ast_skip_blanks(c))) { /* lookup for keys */
for (i = keys; i->key != NULL; i++) { for (i = keys; i->key != NULL; i++) {

View 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); authtoken = sip_get_header(req, reqheader);
buf = ast_str_thread_get(&check_auth_buf, CHECK_AUTH_BUF_INITLEN); buf = ast_str_thread_get(&check_auth_buf, CHECK_AUTH_BUF_INITLEN);
ast_str_set(&buf, 0, "%s", authtoken); ast_str_set(&buf, 0, "%s", authtoken);
c = buf->str; c = ast_str_buffer(buf);
sip_digest_parser(c, keys); sip_digest_parser(c, keys);

View File

@@ -2147,6 +2147,7 @@ static char *handle_showmancmd(struct ast_cli_entry *e, int cmd, struct ast_cli_
struct manager_action *cur; struct manager_action *cur;
struct ast_str *authority; struct ast_str *authority;
int num, l, which; int num, l, which;
const char *auth_str;
char *ret = NULL; char *ret = NULL;
#ifdef AST_XML_DOCS #ifdef AST_XML_DOCS
char syntax_title[64], description_title[64], synopsis_title[64], seealso_title[64]; char syntax_title[64], description_title[64], synopsis_title[64], seealso_title[64];
@@ -2194,7 +2195,7 @@ static char *handle_showmancmd(struct ast_cli_entry *e, int cmd, struct ast_cli_
AST_RWLIST_TRAVERSE(&actions, cur, list) { AST_RWLIST_TRAVERSE(&actions, cur, list) {
for (num = 3; num < a->argc; num++) { for (num = 3; num < a->argc; num++) {
if (!strcasecmp(cur->action, a->argv[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 #ifdef AST_XML_DOCS
if (cur->docsrc == AST_XML_DOC) { if (cur->docsrc == AST_XML_DOC) {
@@ -2203,7 +2204,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 *description = ast_xmldoc_printable(S_OR(cur->description, "Not available"), 1);
char *arguments = ast_xmldoc_printable(S_OR(cur->arguments, "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 *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);
char *responses = ast_xmldoc_printable("None", 1); char *responses = ast_xmldoc_printable("None", 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%s", 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%s",
syntax_title, syntax, syntax_title, syntax,
@@ -2237,7 +2238,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", ast_cli(a->fd, "Action: %s\nSynopsis: %s\nPrivilege: %s\n%s\n",
cur->action, cur->synopsis, cur->action, cur->synopsis,
authority->str, auth_str,
S_OR(cur->description, "")); S_OR(cur->description, ""));
} }
} }

View File

@@ -803,7 +803,7 @@ static void *do_notify(void *data)
for (itervar = event->owner->vars; itervar; itervar = itervar->next) { for (itervar = event->owner->vars; itervar; itervar = itervar->next) {
ast_str_substitute_variables(&tmpstr, 0, chan, itervar->value); 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))) { if (!(apptext = ast_str_create(32))) {