mirror of
https://github.com/asterisk/asterisk.git
synced 2025-09-05 12:16:00 +00:00
pjsip_cli: Fix memory leak in ast_sip_cli_print_sorcery_objectset.
Fixed memory leaks in ast_sip_cli_print_sorcery_objectset and ast_variable_list_sort. (closes issue ASTERISK-23266) Review: http://reviewboard.asterisk.org/r/3200/ ........ Merged revisions 408520 from http://svn.asterisk.org/svn/asterisk/branches/12 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@408521 65c4cc65-6c06-0410-ace0-fbb531ad65f3
This commit is contained in:
@@ -596,19 +596,19 @@ inline struct ast_variable *variable_list_switch(struct ast_variable *l1, struct
|
|||||||
|
|
||||||
struct ast_variable *ast_variable_list_sort(struct ast_variable *start)
|
struct ast_variable *ast_variable_list_sort(struct ast_variable *start)
|
||||||
{
|
{
|
||||||
struct ast_variable *p, *q, *top;
|
struct ast_variable *p, *q;
|
||||||
|
struct ast_variable top;
|
||||||
int changed = 1;
|
int changed = 1;
|
||||||
top = ast_calloc(1, sizeof(struct ast_variable));
|
memset(&top, 0, sizeof(top));
|
||||||
top->next = start;
|
top.next = start;
|
||||||
if (start != NULL && start->next != NULL) {
|
if (start != NULL && start->next != NULL) {
|
||||||
while (changed) {
|
while (changed) {
|
||||||
changed = 0;
|
changed = 0;
|
||||||
q = top;
|
q = ⊤
|
||||||
p = top->next;
|
p = top.next;
|
||||||
while (p->next != NULL) {
|
while (p->next != NULL) {
|
||||||
if (p->next != NULL && strcmp(p->name, p->next->name) > 0) {
|
if (p->next != NULL && strcmp(p->name, p->next->name) > 0) {
|
||||||
q->next = variable_list_switch(p, p->next);
|
q->next = variable_list_switch(p, p->next);
|
||||||
|
|
||||||
changed = 1;
|
changed = 1;
|
||||||
}
|
}
|
||||||
q = p;
|
q = p;
|
||||||
@@ -617,7 +617,7 @@ struct ast_variable *ast_variable_list_sort(struct ast_variable *start)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return top->next;
|
return top.next;
|
||||||
}
|
}
|
||||||
|
|
||||||
const char *ast_config_option(struct ast_config *cfg, const char *cat, const char *var)
|
const char *ast_config_option(struct ast_config *cfg, const char *cat, const char *var)
|
||||||
|
@@ -71,9 +71,8 @@ int ast_sip_cli_print_sorcery_objectset(void *obj, void *arg, int flags)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!(separator = alloca(max_name_width + max_value_width + 8))) {
|
separator = ast_alloca(max_name_width + max_value_width + 8);
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
memset(separator, '=', max_name_width + max_value_width + 3);
|
memset(separator, '=', max_name_width + max_value_width + 3);
|
||||||
separator[max_name_width + max_value_width + 3] = 0;
|
separator[max_name_width + max_value_width + 3] = 0;
|
||||||
|
|
||||||
@@ -86,6 +85,8 @@ int ast_sip_cli_print_sorcery_objectset(void *obj, void *arg, int flags)
|
|||||||
ast_str_append(&context->output_buffer, 0, " %-*s : %s\n", max_name_width, i->name, i->value);
|
ast_str_append(&context->output_buffer, 0, " %-*s : %s\n", max_name_width, i->name, i->value);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ast_variables_destroy(objset);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user