aboutsummaryrefslogtreecommitdiffstats
path: root/channels/iax2-parser.c
diff options
context:
space:
mode:
authortilghman <tilghman@f38db490-d61c-443f-a65b-d21fe96a405b>2008-09-13 13:57:05 +0000
committertilghman <tilghman@f38db490-d61c-443f-a65b-d21fe96a405b>2008-09-13 13:57:05 +0000
commit3379b7c2700a3c8ab5f3c5b047a673c35630d6c9 (patch)
treef4b5d97f1daba73eace102a3d8b60cf37466ff25 /channels/iax2-parser.c
parent758bd74dd66434165f067a5e1961549adcbd374a (diff)
Recorded merge of revisions 143031 via svnmerge from
https://origsvn.digium.com/svn/asterisk/trunk ........ r143031 | tilghman | 2008-09-13 08:54:15 -0500 (Sat, 13 Sep 2008) | 8 lines Repair IAXVAR implementation so that it works again (regression?) (closes issue #13354) Reported by: adomjan Patches: 20080828__bug13354.diff.txt uploaded by Corydon76 (license 14) 20080829__bug13354__1.6.0.diff.txt uploaded by Corydon76 (license 14) Tested by: Corydon76, adomjan ........ git-svn-id: http://svn.digium.com/svn/asterisk/branches/1.6.0@143032 f38db490-d61c-443f-a65b-d21fe96a405b
Diffstat (limited to 'channels/iax2-parser.c')
-rw-r--r--channels/iax2-parser.c29
1 files changed, 15 insertions, 14 deletions
diff --git a/channels/iax2-parser.c b/channels/iax2-parser.c
index cdd4bc31f..127e205d4 100644
--- a/channels/iax2-parser.c
+++ b/channels/iax2-parser.c
@@ -913,20 +913,21 @@ int iax_parse_ies(struct iax_ies *ies, unsigned char *data, int datalen)
*tmp2++ = '\0';
else
tmp2 = "";
- /* Existing variable or new variable? */
- for (var2 = ies->vars, prev = NULL; var2; prev = var2, var2 = var2->next) {
- if (strcmp(tmp, var2->name) == 0) {
- int len = strlen(var2->value) + strlen(tmp2) + 1;
- char *tmp3 = alloca(len);
- snprintf(tmp3, len, "%s%s", var2->value, tmp2);
- var = ast_variable_new(tmp, tmp3, var2->file);
- var->next = var2->next;
- if (prev)
- prev->next = var;
- else
- ies->vars = var;
- ast_free(var2);
- break;
+ {
+ struct ast_str *str = ast_str_create(16);
+ /* Existing variable or new variable? */
+ for (var2 = ies->vars, prev = NULL; var2; prev = var2, var2 = var2->next) {
+ if (strcmp(tmp, var2->name) == 0) {
+ ast_str_set(&str, 0, "%s%s", var2->value, tmp2);
+ var = ast_variable_new(tmp, str->str, var2->file);
+ var->next = var2->next;
+ if (prev)
+ prev->next = var;
+ else
+ ies->vars = var;
+ ast_free(var2);
+ break;
+ }
}
}
if (!var2) {