]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
Fix func_config list entry allocation
authorKinsey Moore <kmoore@digium.com>
Tue, 8 Oct 2013 18:18:21 +0000 (18:18 +0000)
committerKinsey Moore <kmoore@digium.com>
Tue, 8 Oct 2013 18:18:21 +0000 (18:18 +0000)
The AST_CONFIG dialplan function defined in func_config.c allocates its
config file list entries using ast_malloc. List entry allocations
destined for use with Asterisk's linked list API must be ast_calloc()d
or otherwise initialized so that list pointers are set to NULL. These
uses of ast_malloc have been replaced by ast_calloc to prevent
dereferencing of uninitialized pointer values when traversing the list.

(closes issue ASTERISK-22483)
Reported by: Brian Scott
........

Merged revisions 400694 from http://svn.asterisk.org/svn/asterisk/branches/1.8

git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/11@400697 65c4cc65-6c06-0410-ace0-fbb531ad65f3

funcs/func_config.c

index cbc51aaae6ecc0e70e34c777ab849e45f3b49521..d45ad2c820ca695c0bcef1426a2f5e15ba711ba3 100644 (file)
@@ -120,7 +120,7 @@ static int config_function_read(struct ast_channel *chan, const char *cmd, char
                        /* At worst, we might leak an entry while upgrading locks */
                        AST_RWLIST_UNLOCK(&configs);
                        AST_RWLIST_WRLOCK(&configs);
-                       if (!(cur = ast_malloc(sizeof(*cur) + strlen(args.filename) + 1))) {
+                       if (!(cur = ast_calloc(1, sizeof(*cur) + strlen(args.filename) + 1))) {
                                AST_RWLIST_UNLOCK(&configs);
                                return -1;
                        }
@@ -149,7 +149,7 @@ static int config_function_read(struct ast_channel *chan, const char *cmd, char
                }
 
                if (!cur) {
-                       if (!(cur = ast_malloc(sizeof(*cur) + strlen(args.filename) + 1))) {
+                       if (!(cur = ast_calloc(1, sizeof(*cur) + strlen(args.filename) + 1))) {
                                AST_RWLIST_UNLOCK(&configs);
                                return -1;
                        }