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
This commit is contained in:
Tilghman Lesher
2008-09-13 13:54:15 +00:00
parent 08af5bb312
commit 8fbee1307c
3 changed files with 109 additions and 25 deletions

View File

@@ -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;
}