ConfBridge: Use of bridge or user profiles that don't exist
authorKinsey Moore <kmoore@digium.com>
Mon, 13 Jun 2011 14:30:51 +0000 (14:30 +0000)
committerKinsey Moore <kmoore@digium.com>
Mon, 13 Jun 2011 14:30:51 +0000 (14:30 +0000)
Bridge and user profiles are not checked for existence before use.  The lack
of a fully formed bridge profile can cause a segfault when sounds are accessed.
This change ensures that bridge and user profiles exist prior to usage
attempts.

Review: https://reviewboard.asterisk.org/r/1264/

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

apps/app_confbridge.c

index 7cede13..7c4a058 100644 (file)
@@ -1192,14 +1192,22 @@ static int confbridge_exec(struct ast_channel *chan, const char *data)
        if (args.argc > 1 && !ast_strlen_zero(args.b_profile_name)) {
                b_profile_name = args.b_profile_name;
        }
-       conf_find_bridge_profile(chan, b_profile_name, &conference_bridge_user.b_profile);
+       if (!conf_find_bridge_profile(chan, b_profile_name, &conference_bridge_user.b_profile)) {
+               ast_log(LOG_WARNING, "Conference bridge profile %s does not exist\n", b_profile_name);
+               res = -1;
+               goto confbridge_cleanup;
+       }
 
        /* user profile name */
        if (args.argc > 2 && !ast_strlen_zero(args.u_profile_name)) {
                u_profile_name = args.u_profile_name;
        }
 
-       conf_find_user_profile(chan, u_profile_name, &conference_bridge_user.u_profile);
+       if (!conf_find_user_profile(chan, u_profile_name, &conference_bridge_user.u_profile)) {
+               ast_log(LOG_WARNING, "Conference user profile %s does not exist\n", u_profile_name);
+               res = -1;
+               goto confbridge_cleanup;
+       }
        quiet = ast_test_flag(&conference_bridge_user.u_profile, USER_OPT_QUIET);
 
        /* ask for a PIN immediately after finding user profile.  This has to be