summaryrefslogtreecommitdiff
path: root/main/manager.c
diff options
context:
space:
mode:
authorRichard Mudgett <rmudgett@digium.com>2018-01-31 15:40:36 -0600
committerRichard Mudgett <rmudgett@digium.com>2018-02-01 13:51:27 -0600
commit3419a048b95cd5331b7fb6495df298f01b54327c (patch)
tree368a274f68ff827b2cf17f780ee2ed60a8a6d094 /main/manager.c
parentf041bc7863833c2d6b90b585694132171bc27aa2 (diff)
manager.c: Fix potential memory leak and corruption.
ast_str_append_event_header() could potentially leak and corrupt memory if the ast_str needed to expand to add the AMI event header. * Fixed to return error if the ast_str_append() failed. Change-Id: I92f36b855540743b208d76e274152ee2d758176d
Diffstat (limited to 'main/manager.c')
-rw-r--r--main/manager.c17
1 files changed, 5 insertions, 12 deletions
diff --git a/main/manager.c b/main/manager.c
index 3aa910501..a60c69bd1 100644
--- a/main/manager.c
+++ b/main/manager.c
@@ -9497,23 +9497,16 @@ struct ast_datastore *astman_datastore_find(struct mansession *s, const struct a
}
int ast_str_append_event_header(struct ast_str **fields_string,
- const char *header, const char *value)
+ const char *header, const char *value)
{
- struct ast_str *working_str = *fields_string;
-
- if (!working_str) {
- working_str = ast_str_create(128);
- if (!working_str) {
+ if (!*fields_string) {
+ *fields_string = ast_str_create(128);
+ if (!*fields_string) {
return -1;
}
- *fields_string = working_str;
}
- ast_str_append(&working_str, 0,
- "%s: %s\r\n",
- header, value);
-
- return 0;
+ return (ast_str_append(fields_string, 0, "%s: %s\r\n", header, value) < 0) ? -1 : 0;
}
static void manager_event_blob_dtor(void *obj)