]> git.ipfire.org Git - thirdparty/bind9.git/commitdiff
Address potential thread issues:
authorMark Andrews <marka@isc.org>
Wed, 24 Jun 2020 03:42:30 +0000 (13:42 +1000)
committerMark Andrews <marka@isc.org>
Thu, 25 Jun 2020 02:04:36 +0000 (12:04 +1000)
Assign and then check node for NULL to address another thread
changing radix->head in the meantime.

Move 'node != NULL' check into while loop test to silence cppcheck
false positive.

Fix pointer != NULL style.

lib/isc/radix.c

index 72416a61a5982a32e3d232132012cba51bd51e46..fccad5baae13c0d7fe08ffe2fe58a41396a18efb 100644 (file)
@@ -232,15 +232,16 @@ isc_radix_search(isc_radix_tree_t *radix, isc_radix_node_t **target,
 
        *target = NULL;
 
-       if (radix->head == NULL) {
+       node = radix->head;
+
+       if (node == NULL) {
                return (ISC_R_NOTFOUND);
        }
 
-       node = radix->head;
        addr = isc_prefix_touchar(prefix);
        bitlen = prefix->bitlen;
 
-       while (node->bit < bitlen) {
+       while (node != NULL && node->bit < bitlen) {
                if (node->prefix) {
                        stack[cnt++] = node;
                }
@@ -251,13 +252,9 @@ isc_radix_search(isc_radix_tree_t *radix, isc_radix_node_t **target,
                } else {
                        node = node->l;
                }
-
-               if (node == NULL) {
-                       break;
-               }
        }
 
-       if (node && node->prefix) {
+       if (node != NULL && node->prefix) {
                stack[cnt++] = node;
        }