libstdc++: Fix null dereference in pb_ds containers
authorJonathan Wakely <jwakely@redhat.com>
Tue, 4 May 2021 14:46:28 +0000 (15:46 +0100)
committerJonathan Wakely <jwakely@redhat.com>
Tue, 4 May 2021 21:34:20 +0000 (22:34 +0100)
This fixes ubsan errors:

ext/pb_ds/detail/cc_hash_table_map_/cc_ht_map_.hpp:533:15: runtime error: member access within null pointer of type 'struct entry'

libstdc++-v3/ChangeLog:

* include/ext/pb_ds/detail/cc_hash_table_map_/cc_ht_map_.hpp
(find_key_pointer(key_const_reference, false_type))
(find_key_pointer(key_const_reference, true_type)): Do not
dereference null pointer.

libstdc++-v3/include/ext/pb_ds/detail/cc_hash_table_map_/cc_ht_map_.hpp

index aa5c94b..c81bf3a 100644 (file)
@@ -524,13 +524,16 @@ namespace __gnu_pbds
 
        resize_base::notify_find_search_end();
 
-#ifdef _GLIBCXX_DEBUG
        if (p_e == 0)
-         PB_DS_CHECK_KEY_DOES_NOT_EXIST(r_key)
+         {
+           PB_DS_CHECK_KEY_DOES_NOT_EXIST(r_key)
+           return 0;
+         }
        else
-         PB_DS_CHECK_KEY_EXISTS(r_key)
-#endif
-       return &p_e->m_value;
+         {
+           PB_DS_CHECK_KEY_EXISTS(r_key)
+           return &p_e->m_value;
+         }
       }
 
       inline pointer
@@ -550,13 +553,16 @@ namespace __gnu_pbds
 
        resize_base::notify_find_search_end();
 
-#ifdef _GLIBCXX_DEBUG
        if (p_e == 0)
-         PB_DS_CHECK_KEY_DOES_NOT_EXIST(r_key)
+         {
+           PB_DS_CHECK_KEY_DOES_NOT_EXIST(r_key)
+           return 0;
+         }
        else
-         PB_DS_CHECK_KEY_EXISTS(r_key)
-#endif
-       return &p_e->m_value;
+         {
+           PB_DS_CHECK_KEY_EXISTS(r_key)
+           return &p_e->m_value;
+         }
       }
 
       inline bool