Index: apps/app_confbridge.c =================================================================== --- apps/app_confbridge.c (revision 371779) +++ apps/app_confbridge.c (working copy) @@ -2832,6 +2832,10 @@ { int res = 0; + if (conf_load_config(0)) { + ast_log(LOG_ERROR, "Unable to load config. Not loading module.\n"); + return AST_MODULE_LOAD_DECLINE; + } if ((ast_custom_function_register(&confbridge_function))) { return AST_MODULE_LOAD_FAILURE; } @@ -2870,10 +2874,6 @@ return AST_MODULE_LOAD_FAILURE; } - if (conf_load_config(0)) { - ast_log(LOG_ERROR, "Unable to load config. Not loading module.\n"); - return AST_MODULE_LOAD_DECLINE; - } return AST_MODULE_LOAD_SUCCESS; } Index: main/config_options.c =================================================================== --- main/config_options.c (revision 371779) +++ main/config_options.c (working copy) @@ -148,6 +148,10 @@ struct aco_type *type; while ((type = types[idx++])) { + if (!type->internal) { + ast_log(LOG_ERROR, "Attempting to register option using uninitialized type\n"); + return -1; + } if (!ao2_link(type->internal->opts, opt)) { while (--idx) { ao2_unlink(types[idx]->internal->opts, opt); @@ -269,6 +273,12 @@ static struct aco_option *aco_option_find(struct aco_type *type, const char *name) { struct aco_option *opt; + + if (!type || !type->internal || !type->internal->opts) { + ast_log(LOG_NOTICE, "Attempting to use NULL or unitialized config type\n"); + return NULL; + } + /* Try an exact match with OBJ_KEY for the common/fast case, then iterate through * all options for the regex cases */ if (!(opt = ao2_callback(type->internal->opts, OBJ_KEY, find_option_cb, (void *) name))) { @@ -437,6 +447,11 @@ enum aco_process_status aco_process_ast_config(struct aco_info *info, struct aco_file *file, struct ast_config *cfg) { + if (!info->internal) { + ast_log(LOG_ERROR, "Attempt to process %s with uninitialized aco_info\n", file->filename); + goto error; + } + if (!(info->internal->pending = info->snapshot_alloc())) { ast_log(LOG_ERROR, "In %s: Could not allocate temporary objects\n", file->filename); goto error; @@ -474,6 +489,11 @@ return ACO_PROCESS_ERROR; } + if (!info->internal) { + ast_log(LOG_ERROR, "Attempting to process uninitialized aco_info\n"); + return ACO_PROCESS_ERROR; + } + if (!(info->internal->pending = info->snapshot_alloc())) { ast_log(LOG_ERROR, "In %s: Could not allocate temporary objects\n", info->module); return ACO_PROCESS_ERROR; @@ -577,6 +597,13 @@ static void internal_type_destroy(struct aco_type *type) { + /* If we've already had all our internal data cleared out, + * then there's no need to proceed further + */ + if (!type->internal) { + return; + } + if (type->internal->regex) { regfree(type->internal->regex); ast_free(type->internal->regex);