From: Todd C. Miller Date: Tue, 1 Jan 2013 18:31:40 +0000 (-0500) Subject: In rbrepair(), make sure we never try to change the color of the X-Git-Tag: SUDO_1_8_7~1^2~293 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=90d58685ff252fcf5c5410c55b2170d90acc4750;p=sudo In rbrepair(), make sure we never try to change the color of the sentinel node, which is the first entry, not the root. From Michael King --- diff --git a/doc/CONTRIBUTORS b/doc/CONTRIBUTORS index fe5db7cfa..147ce07e8 100644 --- a/doc/CONTRIBUTORS +++ b/doc/CONTRIBUTORS @@ -72,6 +72,7 @@ you believe you should be listed, please send a note to sudo@sudo.ws. Stepan Kasal Mike Kienenberger Dale King + Michael King Jim Knoble Tim Knox Alek O. Komarnitsky @@ -117,7 +118,7 @@ you believe you should be listed, please send a note to sudo@sudo.ws. Diego Elio Petteno Joel Pickett Alex Plotnick - Tran Ngoc Quan + Tran Ngoc Quan Gudleik Rasch Matt Richards Guido van Rossum diff --git a/plugins/sudoers/redblack.c b/plugins/sudoers/redblack.c index 3cbda4c21..97e63e611 100644 --- a/plugins/sudoers/redblack.c +++ b/plugins/sudoers/redblack.c @@ -412,7 +412,7 @@ rbrepair(struct rbtree *tree, struct rbnode *node) struct rbnode *sibling; debug_decl(rbrepair, SUDO_DEBUG_RBTREE) - while (node->color == black && node != rbroot(tree)) { + while (node->color == black && node != rbfirst(tree)) { if (node == node->parent->left) { sibling = node->parent->right; if (sibling->color == red) { @@ -435,7 +435,7 @@ rbrepair(struct rbtree *tree, struct rbnode *node) node->parent->color = black; sibling->right->color = black; rotate_left(tree, node->parent); - node = rbroot(tree); /* exit loop */ + node = rbfirst(tree); /* exit loop */ } } else { /* if (node == node->parent->right) */ sibling = node->parent->left; @@ -459,7 +459,7 @@ rbrepair(struct rbtree *tree, struct rbnode *node) node->parent->color = black; sibling->left->color = black; rotate_right(tree, node->parent); - node = rbroot(tree); /* exit loop */ + node = rbfirst(tree); /* exit loop */ } } }