diff options
-rw-r--r-- | channels/chan_sip.c | 18 |
1 files changed, 10 insertions, 8 deletions
diff --git a/channels/chan_sip.c b/channels/chan_sip.c index 0d898556b..5e829357f 100644 --- a/channels/chan_sip.c +++ b/channels/chan_sip.c @@ -17700,7 +17700,8 @@ static int get_rdnis(struct sip_pvt *p, struct sip_request *oreq, char **name, c static enum sip_get_dest_result get_destination(struct sip_pvt *p, struct sip_request *oreq, int *cc_recall_core_id) { char tmp[256] = "", *uri, *unused_password, *domain; - char tmpf[256] = "", *from = NULL; + RAII_VAR(char *, tmpf, NULL, ast_free); + char *from = NULL; struct sip_request *req; char *decoded_uri; RAII_VAR(struct ast_features_pickup_config *, pickup_cfg, ast_get_chan_features_pickup_config(p->owner), ao2_cleanup); @@ -17755,7 +17756,7 @@ static enum sip_get_dest_result get_destination(struct sip_pvt *p, struct sip_re /* XXX Why is this done in get_destination? Isn't it already done? Needs to be checked */ - ast_copy_string(tmpf, sip_get_header(req, "From"), sizeof(tmpf)); + tmpf = ast_strdup(sip_get_header(req, "From")); if (!ast_strlen_zero(tmpf)) { from = get_in_brackets(tmpf); if (parse_uri_legacy_check(from, "sip:,sips:,tel:", &from, NULL, &domain, NULL)) { @@ -18626,19 +18627,21 @@ static enum check_auth_result check_user_full(struct sip_pvt *p, struct sip_requ int sipmethod, const char *uri, enum xmittype reliable, struct ast_sockaddr *addr, struct sip_peer **authpeer) { - char from[256], *of, *name, *unused_password, *domain; + char *of, *name, *unused_password, *domain; + RAII_VAR(char *, ofbuf, NULL, ast_free); /* beware, everyone starts pointing to this */ + RAII_VAR(char *, namebuf, NULL, ast_free); enum check_auth_result res = AUTH_DONT_KNOW; char calleridname[256]; char *uri2 = ast_strdupa(uri); terminate_uri(uri2); /* trim extra stuff */ - ast_copy_string(from, sip_get_header(req, "From"), sizeof(from)); + ofbuf = ast_strdup(sip_get_header(req, "From")); /* XXX here tries to map the username for invite things */ /* strip the display-name portion off the beginning of the FROM header. */ - if (!(of = (char *) get_calleridname(from, calleridname, sizeof(calleridname)))) { - ast_log(LOG_ERROR, "FROM header can not be parsed \n"); + if (!(of = (char *) get_calleridname(ofbuf, calleridname, sizeof(calleridname)))) { + ast_log(LOG_ERROR, "FROM header can not be parsed\n"); return res; } @@ -18717,8 +18720,7 @@ static enum check_auth_result check_user_full(struct sip_pvt *p, struct sip_requ } if (!ast_strlen_zero(hdr) && (hdr = strstr(hdr, "username=\""))) { - ast_copy_string(from, hdr + strlen("username=\""), sizeof(from)); - name = from; + namebuf = name = ast_strdup(hdr + strlen("username=\"")); name = strsep(&name, "\""); } } |