mirror of
https://github.com/MariaDB/server.git
synced 2025-01-17 20:42:30 +01:00
5 commits
Author | SHA1 | Message | Date | |
---|---|---|---|---|
Sergei Golubchik
|
4cd19779c7 |
MDEV-69 SET optimizer_switch = REPLACE(...) causes ER_WRONG_VALUE_FOR_VAR
find_set() in typelib.c expected a zero-terminated string include/typelib.h: disable unused flags |
||
Sergei Golubchik
|
76f0b94bb0 |
merge with 5.3
sql/sql_insert.cc: CREATE ... IF NOT EXISTS may do nothing, but it is still not a failure. don't forget to my_ok it. ****** CREATE ... IF NOT EXISTS may do nothing, but it is still not a failure. don't forget to my_ok it. sql/sql_table.cc: small cleanup ****** small cleanup |
||
Guilhem Bichot
|
1756d087cd |
Fix for BUG#59894
"set optimizer_switch to e or d causes invalid memory writes/valgrind warnings": due to prefix support, the argument "e" was overwritten with its full value "engine_condition_pushdown", which caused a buffer overrun. This was wrong usage of find_type(); other wrong usages are fixed here too. Please start reading with the comment of typelib.c. client/mysqldump.c: A bug: find_type() expects a bitmap as 3rd argument (each bit is a flag controlling a behaviour of the function); here it was instead passed the length of the string to search! That could give random behaviour of find_type() depending on the string. We rather need to pass a correct flag to find_type(). The correct flag is FIND_TYPE_BASIC (0). Flag 8 is not needed as buff cannot have a comma (see how buff is filled). Flag 1 looks like a superfluous restriction. Flag 4 is not user-friendly (why use --compatible=2 rather than --compatible=mysql40 ?, and we probably not commit to "2" always meaning "mysql40" until the end of times). include/mysql.h.pp: This isn't a problematic API change as we go from char* to const char*: existing code will run unchanged. include/typelib.h: named constants. Not an enum to not significantly change the declaration of find_type() which would be an API change (typelib.h is included in mysql.h). mysql-test/r/mysqldump.result: correct result (see the two requested modes in SQL_MODE) mysql-test/suite/sys_vars/t/optimizer_switch_basic.test: test for BUG#59894. The second SET used to crash. mysql-test/t/mysqldump.test: we had no test for multiple modes in --compatible, which is supported according to --help mysys/typelib.c: Fix for BUG#59894. parse_name() is asked to match "e" with a row of the TYPELIB (the TYPELIB lists permitted flags of optimizer_switch; and comes from optimizer_switch_names[] of sys_vars.cc). find_type() is capable of supporting prefixes, but if it is not passed flag 2 in third argument, it will overwrite its first argument (the string to search for) with the complete name, here overwriting "e" with "engine_condition_pushdown". But as this "e" was a buffer allocated in an Item, it was not big enough to host the longer name, thus the crash. We don't need to know the complete flag's name; the output used from find_type() is just the flag's number (== function's return code). So we can pass flag 2 to find_type() in parse_name(). After doing this fix and the other fixes in this patch, all usages of find_type() were using flag 2; in most usages the string to search for, is not guaranteed to be long enough to host the complete name (it is either directly from argv, or from alloc_root/my_malloc done in an earlier call). Thus, flag 2 is here made implicit: callers need not pass it anymore, it is always automatically turned on. This allows to eliminate an oddity: parse_name() took a const char**, and then removed "const" before calling find_type(), which could theoretically modify the pointed data, thus lying on constness. Last, constants for find_type() are now named. sql-common/client.c: Two bugs: 1) The enum was not in sync with the array (due to a bad porting of WL 1054; the extra OPT_ values are about options present in 5.1 and deleted in 5.5); added a compile_time_assert() to make sure this doesn't happen again 2) find_type() was writing past the end of opt_arg; as opt_arg was allocated with alloc_root() with no extra space, this was an overrun; it could be seen when ** building with -DWITH_VALGRIND -DHAVE_purify -DEXTRA_DEBUG ** making execution go through the faulty code; this faulty code is executed only if the client asks to read a configuration file like this: mysql_options(mysql, MYSQL_READ_DEFAULT_FILE, "/tmp/cnf.cnf"); so by adding such line to the start of mysql_client_test.c::client_connect(), we could see the valgrind warning: ==30548== Invalid write of size 1 ==30548== at 0x4C2624C: strcpy (mc_replace_strmem.c:303) ==30548== by 0x48DC29: find_type (typelib.c:120) ==30548== by 0x465686: mysql_read_default_options (client.c:1344) ==30548== by 0x46830F: mysql_real_connect (client.c:2971) ==30548== by 0x409339: client_connect (mysql_client_test.c:331) ==30548== by 0x463A7F: main (mysql_client_test.c:19902) ==30548== Address 0x61875ad is 0 bytes after a block of size 29 alloc'd ==30548== at 0x4C25153: malloc (vg_replace_malloc.c:195) ==30548== by 0x49BFF1: my_malloc (my_malloc.c:38) ==30548== by 0x49C65C: alloc_root (my_alloc.c:166) ==30548== by 0x48EF97: handle_default_option (default.c:381) ==30548== by 0x49068C: search_default_file_with_ext (default.c:992) ==30548== by 0x48F929: search_default_file (default.c:670) ==30548== by 0x48EDC4: my_search_option_files (default.c:312) ==30548== by 0x48F4B1: my_load_defaults (default.c:576) ==30548== by 0x46517A: mysql_read_default_options (client.c:1207) ==30548== by 0x46830F: mysql_real_connect (client.c:2971) ==30548== by 0x409339: client_connect (mysql_client_test.c:331) ==30548== by 0x463A7F: main (mysql_client_test.c:19902) This is fixed by having find_type() not overwrite anymore. sql/sql_help.cc: cast not needed anymore. sql/table.cc: cast not needed anymore. |
||
Omer BarNir
|
013dcdbd67 |
Modified and added tests following review of WL#4738.
- Added tests for innodb and semisync plugin - Modified existing tests to include variable values in I_S tables - Updated the all_vars test to include optional checkes for INNODB and semisync plugin if loaded mysql-test/suite/sys_vars/r/innodb_adaptive_flushing_basic.result: New result file mysql-test/suite/sys_vars/r/innodb_adaptive_hash_index_basic.result: New result file mysql-test/suite/sys_vars/r/innodb_change_buffering_basic.result: New result file mysql-test/suite/sys_vars/r/innodb_file_format_basic.result: New result file mysql-test/suite/sys_vars/r/innodb_file_format_check_basic.result: New result file mysql-test/suite/sys_vars/r/innodb_io_capacity_basic.result: New result file mysql-test/suite/sys_vars/r/innodb_old_blocks_pct_basic.result: New result file mysql-test/suite/sys_vars/r/innodb_old_blocks_time_basic.result: New result file mysql-test/suite/sys_vars/r/innodb_read_ahead_threshold_basic.result: New result file mysql-test/suite/sys_vars/r/innodb_read_io_threads_basic.result: New result file mysql-test/suite/sys_vars/r/innodb_replication_delay_basic.result: New result file mysql-test/suite/sys_vars/r/innodb_spin_wait_delay_basic.result: New result file mysql-test/suite/sys_vars/r/innodb_stats_on_metadata_basic.result: New result file mysql-test/suite/sys_vars/r/innodb_stats_sample_pages_basic.result: New result file mysql-test/suite/sys_vars/r/innodb_strict_mode_basic.result: New result file mysql-test/suite/sys_vars/r/innodb_thread_sleep_delay_basic.result: Updated result file mysql-test/suite/sys_vars/r/innodb_use_sys_malloc_basic.result: New result file mysql-test/suite/sys_vars/r/innodb_version_basic.result: New result file mysql-test/suite/sys_vars/r/innodb_write_io_threads_basic.result: New result file mysql-test/suite/sys_vars/r/last_insert_id_basic.result: Updated result file mysql-test/suite/sys_vars/r/lc_messages_basic.result: Updated result file mysql-test/suite/sys_vars/r/log_slow_queries_basic.result: Updated result file mysql-test/suite/sys_vars/r/lower_case_file_system_basic.result: Updated result file mysql-test/suite/sys_vars/r/lower_case_table_names_basic.result: Updated result file mysql-test/suite/sys_vars/r/max_join_size_basic.result: Updated result file mysql-test/suite/sys_vars/r/old_alter_table_basic.result: Updated result file mysql-test/suite/sys_vars/r/optimizer_switch_basic.result: Updated result file mysql-test/suite/sys_vars/r/profiling_basic.result: Updated result file mysql-test/suite/sys_vars/r/profiling_history_size_basic.result: Updated result file mysql-test/suite/sys_vars/r/pseudo_thread_id_basic.result: Updated result file mysql-test/suite/sys_vars/r/rand_seed1_basic.result: Updated result file mysql-test/suite/sys_vars/r/rand_seed2_basic.result: Updated result file mysql-test/suite/sys_vars/r/relay_log_recovery_basic.result: Updated result file mysql-test/suite/sys_vars/r/rpl_semi_sync_master_enabled_basic.result: New result file mysql-test/suite/sys_vars/r/rpl_semi_sync_master_timeout_basic.result: New result file mysql-test/suite/sys_vars/r/rpl_semi_sync_master_trace_level_basic.result: New result file mysql-test/suite/sys_vars/r/rpl_semi_sync_master_wait_no_slave_basic.result: New result file mysql-test/suite/sys_vars/r/rpl_semi_sync_slave_enabled_basic.result: New result file mysql-test/suite/sys_vars/r/rpl_semi_sync_slave_trace_level_basic.result: New result file mysql-test/suite/sys_vars/r/sql_log_update_basic.result: Added check for variable values in I_S tables mysql-test/suite/sys_vars/r/sql_max_join_size_basic.result: Added check for variable values in I_S tables mysql-test/suite/sys_vars/r/sql_select_limit_basic.result: Added check for variable values in I_S tables mysql-test/suite/sys_vars/r/thread_cache_size_basic.result: Added check for variable values in I_S tables mysql-test/suite/sys_vars/t/all_vars-master.opt: Added opt file for all_vars.test mysql-test/suite/sys_vars/t/all_vars.test: Modified test to check for semisync plugin and innodb mysql-test/suite/sys_vars/t/innodb_adaptive_flushing_basic.test: Added test for innodb variable mysql-test/suite/sys_vars/t/innodb_adaptive_hash_index_basic.test: Added test for innodb variable mysql-test/suite/sys_vars/t/innodb_change_buffering_basic.test: Added test for innodb variable mysql-test/suite/sys_vars/t/innodb_file_format_basic.test: Added test for innodb variable mysql-test/suite/sys_vars/t/innodb_file_format_check_basic.test: Added test for innodb variable mysql-test/suite/sys_vars/t/innodb_io_capacity_basic.test: Added test for innodb variable mysql-test/suite/sys_vars/t/innodb_old_blocks_pct_basic.test: Added test for innodb variable mysql-test/suite/sys_vars/t/innodb_old_blocks_time_basic.test: Added test for innodb variable mysql-test/suite/sys_vars/t/innodb_read_ahead_threshold_basic.test: Added test for innodb variable mysql-test/suite/sys_vars/t/innodb_read_io_threads_basic.test: Added test for innodb variable mysql-test/suite/sys_vars/t/innodb_replication_delay_basic.test: Added test for innodb variable mysql-test/suite/sys_vars/t/innodb_spin_wait_delay_basic.test: Added test for innodb variable mysql-test/suite/sys_vars/t/innodb_stats_on_metadata_basic.test: Added test for innodb variable mysql-test/suite/sys_vars/t/innodb_stats_sample_pages_basic.test: Added test for innodb variable mysql-test/suite/sys_vars/t/innodb_strict_mode_basic.test: Added test for innodb variable mysql-test/suite/sys_vars/t/innodb_thread_sleep_delay_basic.test: Added test for innodb variable mysql-test/suite/sys_vars/t/innodb_use_sys_malloc_basic.test: Added test for innodb variable mysql-test/suite/sys_vars/t/innodb_version_basic.test: Added test for innodb variable mysql-test/suite/sys_vars/t/innodb_write_io_threads_basic.test: Added test for innodb variable mysql-test/suite/sys_vars/t/last_insert_id_basic.test: Added check for variable values in I_S tables mysql-test/suite/sys_vars/t/lc_messages_basic.test: Added check for variable values in I_S tables mysql-test/suite/sys_vars/t/log_slow_queries_basic.test: Added check for variable values in I_S tables mysql-test/suite/sys_vars/t/lower_case_file_system_basic.test: Added check for variable values in I_S tables mysql-test/suite/sys_vars/t/lower_case_table_names_basic.test: Added check for variable values in I_S tables mysql-test/suite/sys_vars/t/max_join_size_basic.test: Added check for variable values in I_S tables mysql-test/suite/sys_vars/t/old_alter_table_basic.test: Added check for variable values in I_S tables mysql-test/suite/sys_vars/t/optimizer_switch_basic.test: Added check for variable values in I_S tables mysql-test/suite/sys_vars/t/profiling_basic.test: Added check for variable values in I_S tables mysql-test/suite/sys_vars/t/profiling_history_size_basic.test: Added check for variable values in I_S tables mysql-test/suite/sys_vars/t/pseudo_thread_id_basic.test: Added check for variable values in I_S tables and check for session variable being numeric mysql-test/suite/sys_vars/t/rand_seed1_basic.test: Added check for variable values in I_S tables mysql-test/suite/sys_vars/t/rand_seed2_basic.test: Added check for variable values in I_S tables mysql-test/suite/sys_vars/t/relay_log_recovery_basic.test: Added check for variable values in I_S tables mysql-test/suite/sys_vars/t/rpl_semi_sync_master_enabled_basic-master.opt: Added option file for semisync variable test mysql-test/suite/sys_vars/t/rpl_semi_sync_master_enabled_basic.test: Added test file for semisync variable mysql-test/suite/sys_vars/t/rpl_semi_sync_master_timeout_basic-master.opt: Added option file for semisync variable test mysql-test/suite/sys_vars/t/rpl_semi_sync_master_timeout_basic.test: Added test file for semisync variable mysql-test/suite/sys_vars/t/rpl_semi_sync_master_trace_level_basic-master.opt: Added option file for semisync variable test mysql-test/suite/sys_vars/t/rpl_semi_sync_master_trace_level_basic.test: Added test file for semisync variable mysql-test/suite/sys_vars/t/rpl_semi_sync_master_wait_no_slave_basic-master.opt: Added option file for semisync variable test mysql-test/suite/sys_vars/t/rpl_semi_sync_master_wait_no_slave_basic.test: Added test file for semisync variable mysql-test/suite/sys_vars/t/rpl_semi_sync_slave_enabled_basic-master.opt: Added option file for semisync variable test mysql-test/suite/sys_vars/t/rpl_semi_sync_slave_enabled_basic.test: Added test file for semisync variable mysql-test/suite/sys_vars/t/rpl_semi_sync_slave_trace_level_basic-master.opt: Added option file for semisync variable test mysql-test/suite/sys_vars/t/rpl_semi_sync_slave_trace_level_basic.test: Added test file for semisync variable mysql-test/suite/sys_vars/t/sql_log_update_basic.test: Added check for variable values in I_S tables and check for ON/OFF value changes mysql-test/suite/sys_vars/t/sql_max_join_size_basic.test: Added check for variable values in I_S tables mysql-test/suite/sys_vars/t/sql_select_limit_basic.test: Added check for variable values in I_S tables mysql-test/suite/sys_vars/t/thread_cache_size_basic.test: Added check for variable values in I_S tables |
||
Sergei Golubchik
|
1ad5bb1a69 |
WL#4738 streamline/simplify @@variable creation process
Bug#16565 mysqld --help --verbose does not order variablesBug#20413 sql_slave_skip_counter is not shown in show variables Bug#20415 Output of mysqld --help --verbose is incomplete Bug#25430 variable not found in SELECT @@global.ft_max_word_len; Bug#32902 plugin variables don't know their names Bug#34599 MySQLD Option and Variable Reference need to be consistent in formatting! Bug#34829 No default value for variable and setting default does not raise error Bug#34834 ? Is accepted as a valid sql mode Bug#34878 Few variables have default value according to documentation but error occurs Bug#34883 ft_boolean_syntax cant be assigned from user variable to global var. Bug#37187 `INFORMATION_SCHEMA`.`GLOBAL_VARIABLES`: inconsistent status Bug#40988 log_output_basic.test succeeded though syntactically false. Bug#41010 enum-style command-line options are not honoured (maria.maria-recover fails) Bug#42103 Setting key_buffer_size to a negative value may lead to very large allocations Bug#44691 Some plugins configured as MYSQL_PLUGIN_MANDATORY in can be disabled Bug#44797 plugins w/o command-line options have no disabling option in --help Bug#46314 string system variables don't support expressions Bug#46470 sys_vars.max_binlog_cache_size_basic_32 is broken Bug#46586 When using the plugin interface the type "set" for options caused a crash. Bug#47212 Crash in DBUG_PRINT in mysqltest.cc when trying to print octal number Bug#48758 mysqltest crashes on sys_vars.collation_server_basic in gcov builds Bug#49417 some complaints about mysqld --help --verbose output Bug#49540 DEFAULT value of binlog_format isn't the default value Bug#49640 ambiguous option '--skip-skip-myisam' (double skip prefix) Bug#49644 init_connect and \0 Bug#49645 init_slave and multi-byte characters Bug#49646 mysql --show-warnings crashes when server dies CMakeLists.txt: Bug#44691 Some plugins configured as MYSQL_PLUGIN_MANDATORY in can be disabled client/mysql.cc: don't crash with --show-warnings when mysqld dies config/ac-macros/plugins.m4: Bug#44691 Some plugins configured as MYSQL_PLUGIN_MANDATORY in can be disabled include/my_getopt.h: comments include/my_pthread.h: fix double #define mysql-test/mysql-test-run.pl: run sys_vars suite by default properly recognize envirinment variables (e.g. MTR_MAX_SAVE_CORE) set to 0 escape gdb command line arguments mysql-test/suite/sys_vars/r/rpl_init_slave_func.result: init_slave+utf8 bug mysql-test/suite/sys_vars/t/rpl_init_slave_func.test: init_slave+utf8 bug mysys/my_getopt.c: Bug#34599 MySQLD Option and Variable Reference need to be consistent in formatting! Bug#46586 When using the plugin interface the type "set" for options caused a crash. Bug#49640 ambiguous option '--skip-skip-myisam' (double skip prefix) mysys/typelib.c: support for flagset sql/ha_ndbcluster.cc: backport from telco tree sql/item_func.cc: Bug#49644 init_connect and \0 Bug#49645 init_slave and multi-byte characters sql/sql_builtin.cc.in: Bug#44691 Some plugins configured as MYSQL_PLUGIN_MANDATORY in can be disabled sql/sql_plugin.cc: Bug#44691 Some plugins configured as MYSQL_PLUGIN_MANDATORY in can be disabled Bug#32902 plugin variables don't know their names Bug#44797 plugins w/o command-line options have no disabling option in --help sql/sys_vars.cc: all server variables are defined here storage/myisam/ft_parser.c: remove unnecessary updates of param->quot storage/myisam/ha_myisam.cc: myisam_* variables belong here strings/my_vsnprintf.c: %o and %llx unittest/mysys/my_vsnprintf-t.c: %o and %llx tests vio/viosocket.c: bugfix: fix @@wait_timeout to work with socket timeouts (vs. alarm thread) |