summaryrefslogtreecommitdiff
path: root/sql/keycaches.h
diff options
context:
space:
mode:
authorEugene Kosov <claprix@yandex.ru>2019-10-09 03:09:48 +0300
committerEugene Kosov <claprix@yandex.ru>2019-10-14 19:16:50 +0300
commit4d14785546022ea8dc4e249e0b57b55328a12876 (patch)
treee097fdf5d3f2d3eb425829591a3e2b881bc60c0e /sql/keycaches.h
parentf989c0ce66aa50ac904c75ccbdb850c0daa0419f (diff)
downloadmariadb-git-4d14785546022ea8dc4e249e0b57b55328a12876.tar.gz
MDEV-20778 UBSAN: call to function free_rpl_filter() through pointer to incorrect function type
Proper C-style type erasure is done via void*, not via char* or something else. free_key_cache() free_rpl_filter(): types were fixed to avoid function pointer type cast which is still undefined behavior. Note, that casting from void* to any other pointer type is safe and correct.
Diffstat (limited to 'sql/keycaches.h')
-rw-r--r--sql/keycaches.h5
1 files changed, 2 insertions, 3 deletions
diff --git a/sql/keycaches.h b/sql/keycaches.h
index 99528682d0e..e06c8da3d0d 100644
--- a/sql/keycaches.h
+++ b/sql/keycaches.h
@@ -30,7 +30,7 @@ class NAMED_ILINK;
class NAMED_ILIST: public I_List<NAMED_ILINK>
{
public:
- void delete_elements(void (*free_element)(const char*, uchar*));
+ void delete_elements(void (*free_element)(const char*, void*));
bool delete_element(const char *name, uint length, void (*free_element)(const char*, uchar*));
};
@@ -42,7 +42,7 @@ extern NAMED_ILIST key_caches;
KEY_CACHE *create_key_cache(const char *name, uint length);
KEY_CACHE *get_key_cache(const LEX_STRING *cache_name);
KEY_CACHE *get_or_create_key_cache(const char *name, uint length);
-void free_key_cache(const char *name, KEY_CACHE *key_cache);
+void free_key_cache(const char *name, void *key_cache);
bool process_key_caches(process_key_cache_t func, void *param);
/* For Rpl_filter */
@@ -52,7 +52,6 @@ extern NAMED_ILIST rpl_filters;
Rpl_filter *create_rpl_filter(const char *name, uint length);
Rpl_filter *get_rpl_filter(LEX_STRING *filter_name);
Rpl_filter *get_or_create_rpl_filter(const char *name, uint length);
-void free_rpl_filter(const char *name, Rpl_filter *filter);
void free_all_rpl_filters(void);
#endif /* KEYCACHES_INCLUDED */