diff options
author | unknown <anozdrin/alik@quad.opbmk> | 2008-03-28 18:10:04 +0300 |
---|---|---|
committer | unknown <anozdrin/alik@quad.opbmk> | 2008-03-28 18:10:04 +0300 |
commit | fba9e7c878359b0808e0f656d72aceedf34f0f56 (patch) | |
tree | dc8481ecdd397cf4753a4fb4ae0b826a319ed232 /sql/set_var.h | |
parent | 1abfb6e040c7c3b9b157d213cc4e46af3773ce20 (diff) | |
download | mariadb-git-fba9e7c878359b0808e0f656d72aceedf34f0f56.tar.gz |
A patch for Bug#34820: log_output can be set to illegal value.
We have "set" variables, which can accept empty values
(like sql_mode), and which can not (like log_output). The problem
was that the code does not distinguish them and allow empty
values for every set variable.
The fix is to introduce an attribute of a set variable telling
whether it can accept empty values.
mysql-test/r/variables.result:
Update result file.
mysql-test/t/variables.test:
A test case for Bug#34820: log_output can be set to illegal value.
sql/set_var.cc:
Don't allow empty values if it is prohibitted.
sql/set_var.h:
Add a flag (m_allow_empty_value) telling if an empty value is
acceptable for this variable.
Diffstat (limited to 'sql/set_var.h')
-rw-r--r-- | sql/set_var.h | 18 |
1 files changed, 15 insertions, 3 deletions
diff --git a/sql/set_var.h b/sql/set_var.h index b33a3a968bb..c4fc13f1321 100644 --- a/sql/set_var.h +++ b/sql/set_var.h @@ -74,7 +74,8 @@ public: sys_var(const char *name_arg, sys_after_update_func func= NULL, Binlog_status_enum binlog_status_arg= NOT_IN_BINLOG) :name(name_arg), after_update(func), no_support_one_shot(1), - binlog_status(binlog_status_arg) + binlog_status(binlog_status_arg), + m_allow_empty_value(TRUE) {} virtual ~sys_var() {} void chain_sys_var(sys_var_chain *chain_arg) @@ -109,8 +110,16 @@ public: virtual bool is_readonly() const { return 0; } virtual sys_var_pluginvar *cast_pluginvar() { return 0; } +protected: + void set_allow_empty_value(bool allow_empty_value) + { + m_allow_empty_value= allow_empty_value; + } + private: const Binlog_status_enum binlog_status; + + bool m_allow_empty_value; }; @@ -878,8 +887,11 @@ public: sys_var_log_output(sys_var_chain *chain, const char *name_arg, ulong *value_arg, TYPELIB *typelib, sys_after_update_func func) :sys_var(name_arg,func), value(value_arg), enum_names(typelib) - { chain_sys_var(chain); } - bool check(THD *thd, set_var *var) + { + chain_sys_var(chain); + set_allow_empty_value(FALSE); + } + virtual bool check(THD *thd, set_var *var) { return check_set(thd, var, enum_names); } |