]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
Fix some instances where when loading func_odbc, a double-free could occur.
authorRussell Bryant <russell@russellbryant.com>
Wed, 17 Jan 2007 23:31:11 +0000 (23:31 +0000)
committerRussell Bryant <russell@russellbryant.com>
Wed, 17 Jan 2007 23:31:11 +0000 (23:31 +0000)
Also, remove an unneeded error message.  If the failure condition is
actually a memory allocation failure, a log message will already be
generated automatically.

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

funcs/func_odbc.c

index 529a342ff1d52dcd51e73b91f710ef1c9460d750..a03ccb1847ad5f1b43db68b2c8ba5541f947367c 100644 (file)
@@ -363,6 +363,8 @@ static int init_acf_query(struct ast_config *cfg, char *catg, struct acf_odbc_qu
        if ((tmp = ast_variable_retrieve(cfg, catg, "dsn"))) {
                ast_copy_string((*query)->dsn, tmp, sizeof((*query)->dsn));
        } else {
+               free(*query);
+               *query = NULL;
                return -1;
        }
 
@@ -384,6 +386,7 @@ static int init_acf_query(struct ast_config *cfg, char *catg, struct acf_odbc_qu
        (*query)->acf = ast_calloc(1, sizeof(struct ast_custom_function));
        if (! (*query)->acf) {
                free(*query);
+               *query = NULL;
                return -1;
        }
 
@@ -396,6 +399,7 @@ static int init_acf_query(struct ast_config *cfg, char *catg, struct acf_odbc_qu
        if (!((*query)->acf->name)) {
                free((*query)->acf);
                free(*query);
+               *query = NULL;
                return -1;
        }
 
@@ -405,6 +409,7 @@ static int init_acf_query(struct ast_config *cfg, char *catg, struct acf_odbc_qu
                free((char *)(*query)->acf->name);
                free((*query)->acf);
                free(*query);
+               *query = NULL;
                return -1;
        }
 
@@ -440,6 +445,7 @@ static int init_acf_query(struct ast_config *cfg, char *catg, struct acf_odbc_qu
                free((char *)(*query)->acf->name);
                free((*query)->acf);
                free(*query);
+               *query = NULL;
                return -1;
        }
 
@@ -496,7 +502,6 @@ static int odbc_load_module(void)
                struct acf_odbc_query *query = NULL;
 
                if (init_acf_query(cfg, catg, &query)) {
-                       ast_log(LOG_ERROR, "Out of memory\n");
                        free_acf_query(query);
                } else {
                        AST_LIST_INSERT_HEAD(&queries, query, list);