avl: guard against theoretical null pointer dereference
authorPetr Štetiar <ynezz@true.cz>
Wed, 20 Nov 2019 08:31:08 +0000 (09:31 +0100)
committerPetr Štetiar <ynezz@true.cz>
Sun, 24 Nov 2019 12:26:58 +0000 (13:26 +0100)
clang-10 analyzer reports following:

 avl.c:671:25: warning: Access to field 'parent' results in a dereference of a null pointer (loaded from field 'right')
     node->right->parent = parent;
           ~~~~~         ^

Which seems to be impossible to trigger via exported AVL public API, but
it could be probably trigerred by fiddling with the AVL tree node struct
members manually as they are exposed.

Signed-off-by: Petr Štetiar <ynezz@true.cz>
avl.c

diff --git a/avl.c b/avl.c
index 8d0bf65aaa5bdaaf83f0910465281a0542e6dfa1..79ea5c798b64dbde78e7a7e445ba84cfc6b7ec33 100644 (file)
--- a/avl.c
+++ b/avl.c
@@ -45,6 +45,7 @@
 #include <string.h>
 
 #include "avl.h"
 #include <string.h>
 
 #include "avl.h"
+#include "assert.h"
 #include "list.h"
 
 /**
 #include "list.h"
 
 /**
@@ -668,6 +669,7 @@ avl_delete_worker(struct avl_tree *tree, struct avl_node *node)
       return;
     }
 
       return;
     }
 
+    assert(node->right);
     node->right->parent = parent;
 
     if (parent->left == node)
     node->right->parent = parent;
 
     if (parent->left == node)