Repository: qpid-dispatch Updated Branches: refs/heads/master 8e8c46ac0 -> c8c4587eb
DISPATCH-847 - Be more defensive in the use of link mask bits. Project: http://git-wip-us.apache.org/repos/asf/qpid-dispatch/repo Commit: http://git-wip-us.apache.org/repos/asf/qpid-dispatch/commit/c8c4587e Tree: http://git-wip-us.apache.org/repos/asf/qpid-dispatch/tree/c8c4587e Diff: http://git-wip-us.apache.org/repos/asf/qpid-dispatch/diff/c8c4587e Branch: refs/heads/master Commit: c8c4587eb608e75f3240542005d5262f0b939fc3 Parents: 8e8c46a Author: Ted Ross <tr...@redhat.com> Authored: Mon Nov 13 12:22:56 2017 -0500 Committer: Ted Ross <tr...@redhat.com> Committed: Mon Nov 13 12:22:56 2017 -0500 ---------------------------------------------------------------------- include/qpid/dispatch/bitmask.h | 4 ++++ src/bitmask.c | 6 ++++++ src/router_core/connections.c | 11 +++++++---- 3 files changed, 17 insertions(+), 4 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/c8c4587e/include/qpid/dispatch/bitmask.h ---------------------------------------------------------------------- diff --git a/include/qpid/dispatch/bitmask.h b/include/qpid/dispatch/bitmask.h index 91239ec..dd7d3df 100644 --- a/include/qpid/dispatch/bitmask.h +++ b/include/qpid/dispatch/bitmask.h @@ -27,6 +27,8 @@ *@{ */ +#include <stdbool.h> + /** A bit mask */ typedef struct qd_bitmask_t qd_bitmask_t; @@ -46,6 +48,8 @@ int qd_bitmask_value(qd_bitmask_t *b, int bitnum); int qd_bitmask_first_set(qd_bitmask_t *b, int *bitnum); int qd_bitmask_cardinality(const qd_bitmask_t *b); +bool qd_bitmask_valid_bit_value(int bitnum); + int _qdbm_start(qd_bitmask_t *b); void _qdbm_next(qd_bitmask_t *b, int *v); http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/c8c4587e/src/bitmask.c ---------------------------------------------------------------------- diff --git a/src/bitmask.c b/src/bitmask.c index 7967fbb..1939953 100644 --- a/src/bitmask.c +++ b/src/bitmask.c @@ -152,6 +152,12 @@ int qd_bitmask_cardinality(const qd_bitmask_t *b) } +bool qd_bitmask_valid_bit_value(int bitnum) +{ + return (bitnum >= 0 && bitnum < QD_BITMASK_BITS); +} + + int _qdbm_start(qd_bitmask_t *b) { int v; http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/c8c4587e/src/router_core/connections.c ---------------------------------------------------------------------- diff --git a/src/router_core/connections.c b/src/router_core/connections.c index 5b2a8c8..2c7200b 100644 --- a/src/router_core/connections.c +++ b/src/router_core/connections.c @@ -776,10 +776,12 @@ static void qdr_link_cleanup_CT(qdr_core_t *core, qdr_connection_t *conn, qdr_li // If this link is involved in inter-router communication, remove its reference // from the core mask-bit tables // - if (link->link_type == QD_LINK_CONTROL) - core->control_links_by_mask_bit[conn->mask_bit] = 0; - if (link->link_type == QD_LINK_ROUTER) - core->data_links_by_mask_bit[conn->mask_bit] = 0; + if (qd_bitmask_valid_bit_value(conn->mask_bit)) { + if (link->link_type == QD_LINK_CONTROL) + core->control_links_by_mask_bit[conn->mask_bit] = 0; + if (link->link_type == QD_LINK_ROUTER) + core->data_links_by_mask_bit[conn->mask_bit] = 0; + } // // Clean up the work list @@ -1340,6 +1342,7 @@ static void qdr_link_inbound_first_attach_CT(qdr_core_t *core, qdr_action_t *act // Reject any attaches of inter-router links that arrive on connections that are not inter-router. // if (((link->link_type == QD_LINK_CONTROL || link->link_type == QD_LINK_ROUTER) && conn->role != QDR_ROLE_INTER_ROUTER)) { + link->link_type = QD_LINK_ENDPOINT; // Demote the link type to endpoint if this is not an inter-router connection qdr_link_outbound_detach_CT(core, link, 0, QDR_CONDITION_FORBIDDEN, true); qdr_terminus_free(source); qdr_terminus_free(target); --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@qpid.apache.org For additional commands, e-mail: commits-h...@qpid.apache.org