diff options
author | tilghman <tilghman@f38db490-d61c-443f-a65b-d21fe96a405b> | 2008-09-13 13:57:05 +0000 |
---|---|---|
committer | tilghman <tilghman@f38db490-d61c-443f-a65b-d21fe96a405b> | 2008-09-13 13:57:05 +0000 |
commit | 3379b7c2700a3c8ab5f3c5b047a673c35630d6c9 (patch) | |
tree | f4b5d97f1daba73eace102a3d8b60cf37466ff25 /channels/iax2-parser.c | |
parent | 758bd74dd66434165f067a5e1961549adcbd374a (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.c | 29 |
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) { |