]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
app_confbridge: Fix NULL check in action_kick_last.
authorCorey Farrell <git@cfware.com>
Tue, 9 Jan 2018 00:47:38 +0000 (19:47 -0500)
committerCorey Farrell <git@cfware.com>
Tue, 9 Jan 2018 00:58:33 +0000 (18:58 -0600)
The check for last_user == NULL needs to happen before we dereference
the variable, previously it was possible for us to check flags of a NULL
last_user.

Change-Id: I274f737aa8af9d2d53e4a78cdd7ad57561003945

apps/app_confbridge.c

index ae3df720831fe673226e69ee5cbd18d95c418d84..e99311d5424889a79739e81a07720cf822d50b9c 100644 (file)
@@ -2666,17 +2666,23 @@ static int action_kick_last(struct confbridge_conference *conference,
        }
 
        ao2_lock(conference);
-       if (((last_user = AST_LIST_LAST(&conference->active_list)) == user)
-               || (ast_test_flag(&last_user->u_profile, USER_OPT_ADMIN))) {
+       last_user = AST_LIST_LAST(&conference->active_list);
+       if (!last_user) {
+               ao2_unlock(conference);
+               return 0;
+       }
+
+       if (last_user == user || ast_test_flag(&last_user->u_profile, USER_OPT_ADMIN)) {
                ao2_unlock(conference);
                play_file(bridge_channel, NULL,
                        conf_get_sound(CONF_SOUND_ERROR_MENU, conference->b_profile.sounds));
-       } else if (last_user && !last_user->kicked) {
+       } else if (!last_user->kicked) {
                last_user->kicked = 1;
                pbx_builtin_setvar_helper(last_user->chan, "CONFBRIDGE_RESULT", "KICKED");
                ast_bridge_remove(conference->bridge, last_user->chan);
                ao2_unlock(conference);
        }
+
        return 0;
 }