]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
manager.c: Fix potential memory leak and corruption.
authorRichard Mudgett <rmudgett@digium.com>
Wed, 31 Jan 2018 21:40:36 +0000 (15:40 -0600)
committerRichard Mudgett <rmudgett@digium.com>
Thu, 1 Feb 2018 19:50:47 +0000 (13:50 -0600)
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

main/manager.c

index 4e611a085b7c4b00adaabb0a8497f346e097bfa6..3b52377f6764f4bcc503ef1ff670d2e9d385a69e 100644 (file)
@@ -9475,23 +9475,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)