diff options
author | Eugene Kosov <claprix@yandex.ru> | 2019-10-09 03:09:48 +0300 |
---|---|---|
committer | Eugene Kosov <claprix@yandex.ru> | 2019-10-14 19:16:50 +0300 |
commit | 4d14785546022ea8dc4e249e0b57b55328a12876 (patch) | |
tree | e097fdf5d3f2d3eb425829591a3e2b881bc60c0e /sql/keycaches.h | |
parent | f989c0ce66aa50ac904c75ccbdb850c0daa0419f (diff) | |
download | mariadb-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.h | 5 |
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 */ |