mirror of
https://github.com/asterisk/asterisk.git
synced 2025-09-24 14:56:58 +00:00
PBX: Handle errors from AST_VECTOR_APPEND.
This resolves potentials leaks on AST_VECTOR_APPEND error in: * ast_context_add_include2 * ast_context_add_switch2 * ast_context_add_ignorepat2 Change-Id: Ib60e95c4f622fa3b832d87227c0523a695d736b6
This commit is contained in:
18
main/pbx.c
18
main/pbx.c
@@ -6692,7 +6692,11 @@ int ast_context_add_include2(struct ast_context *con, const char *value,
|
||||
}
|
||||
|
||||
/* ... include new context into context list, unlock, return */
|
||||
AST_VECTOR_APPEND(&con->includes, new_include);
|
||||
if (AST_VECTOR_APPEND(&con->includes, new_include)) {
|
||||
include_free(new_include);
|
||||
ast_unlock_context(con);
|
||||
return -1;
|
||||
}
|
||||
ast_verb(3, "Including context '%s' in context '%s'\n",
|
||||
ast_get_include_name(new_include), ast_get_context_name(con));
|
||||
|
||||
@@ -6754,7 +6758,11 @@ int ast_context_add_switch2(struct ast_context *con, const char *value,
|
||||
}
|
||||
|
||||
/* ... sw new context into context list, unlock, return */
|
||||
AST_VECTOR_APPEND(&con->alts, new_sw);
|
||||
if (AST_VECTOR_APPEND(&con->alts, new_sw)) {
|
||||
sw_free(new_sw);
|
||||
ast_unlock_context(con);
|
||||
return -1;
|
||||
}
|
||||
|
||||
ast_verb(3, "Including switch '%s/%s' in context '%s'\n",
|
||||
ast_get_switch_name(new_sw), ast_get_switch_data(new_sw), ast_get_context_name(con));
|
||||
@@ -6842,7 +6850,11 @@ int ast_context_add_ignorepat2(struct ast_context *con, const char *value, const
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
AST_VECTOR_APPEND(&con->ignorepats, ignorepat);
|
||||
if (AST_VECTOR_APPEND(&con->ignorepats, ignorepat)) {
|
||||
ignorepat_free(ignorepat);
|
||||
ast_unlock_context(con);
|
||||
return -1;
|
||||
}
|
||||
ast_unlock_context(con);
|
||||
|
||||
return 0;
|
||||
|
Reference in New Issue
Block a user