]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
apps/app_queue: Prevent possible crash when evaluating queue penalty rules
authorMatthew Jordan <mjordan@digium.com>
Thu, 9 Apr 2015 02:03:57 +0000 (02:03 +0000)
committerMatthew Jordan <mjordan@digium.com>
Thu, 9 Apr 2015 02:03:57 +0000 (02:03 +0000)
Although it only occurred once, a crash occurred when a queue attempted to
evaluate a queue penalty rule that appeared to have already been destroyed.
In many locations in app_queue, a test is done to see if qe->pr is NULL;
however, when we dispose of a queue's penalty rules, we don't set the pointer
to NULL after free'ing it. This patch does that to prevent any dangling
pointers from lingering on the queue object.

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

ASTERISK-23319 #close
Reported by: Vadim
patches:
  rb4552.patch submitted by Stefan Engström (License 6691)

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

apps/app_queue.c

index 907e396f37b8ceacc8cda6fcccc6bd26567acf6f..874428663132b0a50803f8bc6320460c866463b8 100644 (file)
@@ -3357,6 +3357,7 @@ static void leave_queue(struct queue_ent *qe)
                        while ((pr_iter = AST_LIST_REMOVE_HEAD(&qe->qe_rules, list))) {
                                ast_free(pr_iter);
                        }
+                       qe->pr = NULL;
                        snprintf(posstr, sizeof(posstr), "%d", qe->pos);
                        pbx_builtin_setvar_helper(qe->chan, "QUEUEPOSITION", posstr);
                } else {