diff options
author | Nikita Malyavin <nikitamalyavin@gmail.com> | 2019-07-18 03:15:55 +1000 |
---|---|---|
committer | Nikita Malyavin <nikitamalyavin@gmail.com> | 2021-07-27 14:15:01 +0300 |
commit | 6ed47508c86b7d1761ae325f11aefe27cac31e38 (patch) | |
tree | 8c75cfd7f941a2db630bf2268ff0e1ba5fb87492 /sql/sql_plugin.cc | |
parent | c6bff46958faa745f529ac17101a63377925dbd8 (diff) | |
download | mariadb-git-6ed47508c86b7d1761ae325f11aefe27cac31e38.tar.gz |
add const qualifiers to sys_var::value_ptr functions and fix const casts
This is important since Sys_var_typelib and its descendants return
pointers to constant symbols from *_value_ptr, which are situated in
write-protected-memory.
* functions const-qualified:
- value_ptr
- session_value_ptr
- global_value_ptr
- default_value_ptr
- Sys_var_vers_asof::value_ptr
- other minor private ones
* remove C-style typecasts when it discards qualifiers
Diffstat (limited to 'sql/sql_plugin.cc')
-rw-r--r-- | sql/sql_plugin.cc | 24 |
1 files changed, 11 insertions, 13 deletions
diff --git a/sql/sql_plugin.cc b/sql/sql_plugin.cc index ffb7d747537..32ba1d1ea6a 100644 --- a/sql/sql_plugin.cc +++ b/sql/sql_plugin.cc @@ -293,14 +293,14 @@ public: sys_var_pluginvar(sys_var_chain *chain, const char *name_arg, st_plugin_int *p, st_mysql_sys_var *plugin_var_arg); sys_var_pluginvar *cast_pluginvar() { return this; } - uchar* real_value_ptr(THD *thd, enum_var_type type); - TYPELIB* plugin_var_typelib(void); - uchar* do_value_ptr(THD *thd, enum_var_type type, const LEX_CSTRING *base); - uchar* session_value_ptr(THD *thd, const LEX_CSTRING *base) + uchar* real_value_ptr(THD *thd, enum_var_type type) const; + TYPELIB* plugin_var_typelib(void) const; + const uchar* do_value_ptr(THD *thd, enum_var_type type, const LEX_CSTRING *base) const; + const uchar* session_value_ptr(THD *thd, const LEX_CSTRING *base) const { return do_value_ptr(thd, OPT_SESSION, base); } - uchar* global_value_ptr(THD *thd, const LEX_CSTRING *base) + const uchar* global_value_ptr(THD *thd, const LEX_CSTRING *base) const { return do_value_ptr(thd, OPT_GLOBAL, base); } - uchar *default_value_ptr(THD *thd) + const uchar *default_value_ptr(THD *thd) const { return do_value_ptr(thd, OPT_DEFAULT, 0); } bool do_check(THD *thd, set_var *var); virtual void session_save_default(THD *thd, set_var *var) {} @@ -3349,7 +3349,7 @@ sys_var_pluginvar::sys_var_pluginvar(sys_var_chain *chain, const char *name_arg, plugin_opt_set_limits(&option, pv); } -uchar* sys_var_pluginvar::real_value_ptr(THD *thd, enum_var_type type) +uchar* sys_var_pluginvar::real_value_ptr(THD *thd, enum_var_type type) const { if (type == OPT_DEFAULT) { @@ -3423,7 +3423,7 @@ bool sys_var_pluginvar::session_is_default(THD *thd) } -TYPELIB* sys_var_pluginvar::plugin_var_typelib(void) +TYPELIB* sys_var_pluginvar::plugin_var_typelib(void) const { switch (plugin_var->flags & (PLUGIN_VAR_TYPEMASK | PLUGIN_VAR_THDLOCAL)) { case PLUGIN_VAR_ENUM: @@ -3441,12 +3441,10 @@ TYPELIB* sys_var_pluginvar::plugin_var_typelib(void) } -uchar* sys_var_pluginvar::do_value_ptr(THD *thd, enum_var_type type, - const LEX_CSTRING *base) +const uchar* sys_var_pluginvar::do_value_ptr(THD *thd, enum_var_type type, + const LEX_CSTRING *base) const { - uchar* result; - - result= real_value_ptr(thd, type); + const uchar* result= real_value_ptr(thd, type); if ((plugin_var->flags & PLUGIN_VAR_TYPEMASK) == PLUGIN_VAR_ENUM) result= (uchar*) get_type(plugin_var_typelib(), *(ulong*)result); |