From 8441069b71fbd0b69ebcded444ef497f767d9e81 Mon Sep 17 00:00:00 2001 From: John Wellbelove Date: Thu, 12 Jun 2025 13:13:34 +0100 Subject: [PATCH] Fixed possible nullptr references --- include/etl/map.h | 25 ++++++++++++++++--------- include/etl/multimap.h | 24 +++++++++++++++--------- include/etl/multiset.h | 24 +++++++++++++++--------- include/etl/set.h | 24 +++++++++++++++--------- 4 files changed, 61 insertions(+), 36 deletions(-) diff --git a/include/etl/map.h b/include/etl/map.h index 482742ba..abad1aaf 100644 --- a/include/etl/map.h +++ b/include/etl/map.h @@ -290,16 +290,23 @@ namespace etl { // If critical node matches child node direction then perform a two // node rotate in the direction of the critical node - if (critical_node->weight == critical_node->children[critical_node->dir]->dir) + // Check for nullptr before dereferencing to avoid C28182 warning + if (critical_node->children[critical_node->dir] != ETL_NULLPTR) ETL_UNLIKELY { - rotate_2node(critical_node, critical_node->dir); - } - // Otherwise perform a three node rotation in the direction of the - // critical node - else - { - rotate_3node(critical_node, critical_node->dir, - critical_node->children[critical_node->dir]->children[1 - critical_node->dir]->dir); + if (critical_node->weight == critical_node->children[critical_node->dir]->dir) + { + rotate_2node(critical_node, critical_node->dir); + } + // Otherwise perform a three node rotation in the direction of the + // critical node + else + { + if (critical_node->children[critical_node->dir]->children[1 - critical_node->dir] != ETL_NULLPTR) ETL_UNLIKELY + { + rotate_3node(critical_node, critical_node->dir, + critical_node->children[critical_node->dir]->children[1 - critical_node->dir]->dir); + } + } } } } diff --git a/include/etl/multimap.h b/include/etl/multimap.h index 5a586a5c..1bb7235a 100644 --- a/include/etl/multimap.h +++ b/include/etl/multimap.h @@ -286,16 +286,22 @@ namespace etl { // If critical node matches child node direction then perform a two // node rotate in the direction of the critical node - if (critical_node->weight == critical_node->children[critical_node->dir]->dir) + if (critical_node->children[critical_node->dir] != ETL_NULLPTR) ETL_UNLIKELY { - rotate_2node(critical_node, critical_node->dir); - } - // Otherwise perform a three node rotation in the direction of the - // critical node - else - { - rotate_3node(critical_node, critical_node->dir, - critical_node->children[critical_node->dir]->children[1 - critical_node->dir]->dir); + if (critical_node->weight == critical_node->children[critical_node->dir]->dir) + { + rotate_2node(critical_node, critical_node->dir); + } + // Otherwise perform a three node rotation in the direction of the + // critical node + else + { + if (critical_node->children[critical_node->dir]->children[1 - critical_node->dir] != ETL_NULLPTR) ETL_UNLIKELY + { + rotate_3node(critical_node, critical_node->dir, + critical_node->children[critical_node->dir]->children[1 - critical_node->dir]->dir); + } + } } } } diff --git a/include/etl/multiset.h b/include/etl/multiset.h index ae024e3e..46b3aa85 100644 --- a/include/etl/multiset.h +++ b/include/etl/multiset.h @@ -341,16 +341,22 @@ namespace etl { // If critical node matches child node direction then perform a two // node rotate in the direction of the critical node - if (critical_node->weight == critical_node->children[critical_node->dir]->dir) + if (critical_node->children[critical_node->dir] != ETL_NULLPTR) ETL_UNLIKELY { - rotate_2node(critical_node, critical_node->dir); - } - // Otherwise perform a three node rotation in the direction of the - // critical node - else - { - rotate_3node(critical_node, critical_node->dir, - critical_node->children[critical_node->dir]->children[1 - critical_node->dir]->dir); + if (critical_node->weight == critical_node->children[critical_node->dir]->dir) + { + rotate_2node(critical_node, critical_node->dir); + } + // Otherwise perform a three node rotation in the direction of the + // critical node + else + { + if (critical_node->children[critical_node->dir]->children[1 - critical_node->dir] != ETL_NULLPTR) ETL_UNLIKELY + { + rotate_3node(critical_node, critical_node->dir, + critical_node->children[critical_node->dir]->children[1 - critical_node->dir]->dir); + } + } } } } diff --git a/include/etl/set.h b/include/etl/set.h index ccca8563..ff8823c1 100644 --- a/include/etl/set.h +++ b/include/etl/set.h @@ -325,16 +325,22 @@ namespace etl { // If critical node matches child node direction then perform a two // node rotate in the direction of the critical node - if (critical_node->weight == critical_node->children[critical_node->dir]->dir) + if (critical_node->children[critical_node->dir] != ETL_NULLPTR) ETL_UNLIKELY { - rotate_2node(critical_node, critical_node->dir); - } - // Otherwise perform a three node rotation in the direction of the - // critical node - else - { - rotate_3node(critical_node, critical_node->dir, - critical_node->children[critical_node->dir]->children[1 - critical_node->dir]->dir); + if (critical_node->weight == critical_node->children[critical_node->dir]->dir) + { + rotate_2node(critical_node, critical_node->dir); + } + // Otherwise perform a three node rotation in the direction of the + // critical node + else + { + if (critical_node->children[critical_node->dir]->children[1 - critical_node->dir] != ETL_NULLPTR) ETL_UNLIKELY + { + rotate_3node(critical_node, critical_node->dir, + critical_node->children[critical_node->dir]->children[1 - critical_node->dir]->dir); + } + } } } }