sorcery: Eliminate shadowing a varaible that caused confusion.
authorRichard Mudgett <rmudgett@digium.com>
Mon, 9 Dec 2013 18:32:57 +0000 (18:32 +0000)
committerRichard Mudgett <rmudgett@digium.com>
Mon, 9 Dec 2013 18:32:57 +0000 (18:32 +0000)
* Eliminated shadowing of the __ast_sorcery_apply_config() name parameter
causing confusion.

* Fix potential crash from sorcery.conf user input in
__ast_sorcery_apply_config() if the user supplied a malformed config line
that is missing the sorcery object type name.

* Remove redundant test in __ast_sorcery_apply_config().  !config and
config == CONFIGS_STATUS_FILEMISSING are identical.
........

Merged revisions 403541 from http://svn.asterisk.org/svn/asterisk/branches/12

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

main/sorcery.c

index d0100ac..2ea6d9e 100644 (file)
@@ -513,19 +513,21 @@ int __ast_sorcery_apply_config(struct ast_sorcery *sorcery, const char *name, co
        struct ast_variable *mapping;
        int res = 0;
 
-       if (!config || (config == CONFIG_STATUS_FILEMISSING) || (config == CONFIG_STATUS_FILEINVALID)) {
+       if (!config || config == CONFIG_STATUS_FILEINVALID) {
                return -1;
        }
 
        for (mapping = ast_variable_browse(config, name); mapping; mapping = mapping->next) {
                RAII_VAR(char *, mapping_name, ast_strdup(mapping->name), ast_free);
                RAII_VAR(char *, mapping_value, ast_strdup(mapping->value), ast_free);
-               char *options = mapping_name, *name = strsep(&options, "/");
-               char *data = mapping_value, *wizard = strsep(&data, ",");
+               char *options = mapping_name;
+               char *type = strsep(&options, "/");
+               char *data = mapping_value;
+               char *wizard = strsep(&data, ",");
                unsigned int caching = 0;
 
-               /* If no wizard exists just skip, nothing we can do */
-               if (ast_strlen_zero(wizard)) {
+               /* If no object type or wizard exists just skip, nothing we can do */
+               if (ast_strlen_zero(type) || ast_strlen_zero(wizard)) {
                        continue;
                }
 
@@ -535,7 +537,8 @@ int __ast_sorcery_apply_config(struct ast_sorcery *sorcery, const char *name, co
                }
 
                /* Any error immediately causes us to stop */
-               if ((res = sorcery_apply_wizard_mapping(sorcery, name, module, wizard, data, caching))) {
+               if (sorcery_apply_wizard_mapping(sorcery, type, module, wizard, data, caching)) {
+                       res = -1;
                        break;
                }
        }