summaryrefslogtreecommitdiff
path: root/channels/iax2-parser.c
diff options
context:
space:
mode:
authorTilghman Lesher <tilghman@meg.abyt.es>2008-09-13 13:54:15 +0000
committerTilghman Lesher <tilghman@meg.abyt.es>2008-09-13 13:54:15 +0000
commit8fbee1307c5f8c115fdc10284658e49951e9beab (patch)
treed9167154888da9a9e9ba16dc38c14b8e5a9723f3 /channels/iax2-parser.c
parent08af5bb31222c39739b8ec216b403756fb250924 (diff)
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: https://origsvn.digium.com/svn/asterisk/trunk@143031 65c4cc65-6c06-0410-ace0-fbb531ad65f3
Diffstat (limited to 'channels/iax2-parser.c')
-rw-r--r--channels/iax2-parser.c36
1 files changed, 22 insertions, 14 deletions
diff --git a/channels/iax2-parser.c b/channels/iax2-parser.c
index 342792231..b9af6fd6e 100644
--- a/channels/iax2-parser.c
+++ b/channels/iax2-parser.c
@@ -923,24 +923,32 @@ 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 length = strlen(var2->value) + strlen(tmp2) + 1;
- char *tmp3 = alloca(length);
- snprintf(tmp3, length, "%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;
+ }
+ snprintf(tmp, sizeof(tmp), "Assigned (%p)%s to (%p)%s\n", var->name, var->name, var->value, var->value);
+ errorf(tmp);
+ ast_free(var2);
+ break;
+ }
}
+ ast_free(str);
}
+
if (!var2) {
var = ast_variable_new(tmp, tmp2, "");
+ snprintf(tmp, sizeof(tmp), "Assigned (%p)%s to (%p)%s\n", var->name, var->name, var->value, var->value);
+ errorf(tmp);
var->next = ies->vars;
ies->vars = var;
}