Bug#35658 (An empty binary value leads to mysqld crash)
Before this fix, the following token
b''
caused the parser to crash when reading the binary value from the empty string.
The crash was caused by:
ptr+= max_length - 1;
because max_length is unsigned and was 0, causing an overflow.
With this fix, an empty binary literal b'' is parsed as a binary value 0,
in Item_bin_string.
mysql-test/r/varbinary.result:
Bug#35658 (An empty binary value leads to mysqld crash)
mysql-test/t/varbinary.test:
Bug#35658 (An empty binary value leads to mysqld crash)
sql/item.cc:
Bug#35658 (An empty binary value leads to mysqld crash)
Normalize directory names before adding them to default_directories.
mysys/default.c:
Normalize directory names with unpack_dirname() before adding them
to default_directories. This way, /etc/ and /etc will not count as
duplicates.
Because this entails allocating memory to store the normalized names,
add error handling and ensure that it doesn't leak memory in case
both my_print_defaults() and load_defaults() are called.
Clean up the Windows code that finds the exe's parent directory, and
pull it out into a separate function.
Reorganize the code into a single init_default_directories() function,
with internal #ifdefs, instead of init_default_directories_<system>()
functions which were accessed via a function pointer. This is more in
line with normal MySQL coding style, and easier to read for some.
Bug#33812: mysql client incorrectly parsing DELIMITER
Remove unnecessary and incorrect code that tried
to pull delimiter commands out of the middle of
statements.
as a commentary
mysql client has been modified to interpret EOL after
standalone -- commentary strings like whitespace
character (according to
http://dev.mysql.com/doc/refman/5.0/en/ansi-diff-comments.html)
mysql-test/t/mysql_delimiter.sql:
Added test case for bug #36244.
This bugs clarifies a warning message issued when the query cache data
size becomes smaller than the minium allowed size.
mysql-test/r/query_cache.result:
New warning message when a too small value has been set for query cache
size.
sql/set_var.cc:
To avoid poluting the QC API the warning messages are moved into the
QC module.
sql/share/errmsg.txt:
Changed error message so that minimal cache size always is hinted.
sql/sql_cache.cc:
Modified the warning message so that the minimal cache size always is
hinted.
Added interface method Query_cache::get_minimal_size_limit().
sql/sql_cache.h:
Modified the warning message so that the minimal cache size always is
hinted.
Added interface method Query_cache::get_minimal_size_limit().
If during a FLUSH PRIVILEGES the server fails to load the new privilege
tables, the error message is lost. This patch is a back port from 5.1 which
adresses this issue by setting the server in an error state if a failure
occurrs.
This patch also corrects an incorrect variable assignment which might
cause an error state to be reverted by coincidence.
sql/sql_parse.cc:
* Set error state if acl_reload or grant_reload fails.
* Fix bad variable assignment which cancels previous error status.
Bug#37167 funcs_1: Many tests fail if the embedded server is used.
Bug#37164 funcs_1: Some tests fail if an optional character set is missing.
+ some cleanup within the testsuite related to the fixes above
+ some adjustments to open bugs on Mac OS X
Bug#37167 funcs_1: Many tests fail if the embedded server is used.
Bug#37164 funcs_1: Some tests fail if an optional character set is missing.
+ some cleanup within the testsuite related to the fixes above
+ some adjustments to open bugs on Mac OS X
Details:
- Remove the initial loading of data from tests if these data
are not somewhere retrieved
- Remove any use of columns with attribute unicode
(-> UCS2 is no more needed) from tests where unicode
properties are not checked or somehow required
- Create a separate branch of the Character maximum length test
(CML). If UCS2 is available than this test gets applied to
every available type of string column with attribute unicode
This prevents any loss of coverage by the points above.
- Disable the execution of is_tables_ndb which gives wrong
results because of a bug. Correct the exepected results of
this test.
- In case of tests failing when applied to the embedded server
1) Create a variant of this test for the embedded server
or
2) Skip the test in case of embedded server
depending on purpose and complexity of test.
- Skip the tests which could suffer from
Bug 28309 First insert violates unique constraint - was "memory" table empty ?
Bug 37380 Test funcs_1.is_columns_myisam_embedded fails on OS X
(both bugs Mac OS X, embedded server, MySQL 5.0 only)
- Minor improvements like remove typos
mysql-test/r/federated_disabled.result:
Bug#37069 (5.0): test case
mysql-test/t/federated_disabled-master.opt:
Bug#37069 (5.0): test case
mysql-test/t/federated_disabled.test:
Bug#37069 (5.0): test case
Fix for this bug and additional improvements/fixes
In detail:
- Remove unicode attribute from several columns
(unicode properties were nowhere needed/tested)
of the table tb3
-> The runnability of these tests depends no more on
the availibility of some optional collations.
- Use a table tb3 with the same layout for all
engines to be tested and unify the engine name
within the protocols.
-> <engine>_trig_<abc>.result have the same content
- Do not load data into tb3 if these rows have no
impact on result sets
- Add tests for NDB (they exist already in 5.1)
- "--replace_result" at various places because
NDB variants of tests failed with "random" row
order in results
This fixes a till now unknown weakness within the
funcs_1 NDB tests existing in 5.1 and 6.0
- Fix the expected result of ndb_trig_1011ext
which suffered from Bug 32656
+ disable this test
- funcs_1 could be executed with the mysql-test-run.pl
option "--reorder", which saves some runtime by
optimizing server restarts.
Runtimes on tmpfs (one attempt only):
with reorder 132 seconds
without reorder 183 seconds
- Adjust two "check" statements within func_misc.test
which were incorrect (We had one run with result set
difference though the server worked good.)
- minor fixes in comments
Fix for this bug and a second similar problem
found during experimenting.
This replaces the first fix (already pushed to 5.1
and merged to 6.0) which
- failed in runs with the embedded server
- cannot be ported back to 5.0
There was a typo in a error check causing wrong thing to be ckecked
and a possible error not being caught.
Fixed by using the correct variable to test for malloc() errors.
tests/mysql_client_test.c:
Bug #36887: fixed a typo
first row or fails with an error:
ERROR 1022 (23000): Can't write; duplicate key in table ''
The server uses intermediate temporary table to store updated
row data. The first column of this table contains rowid.
Current server implementation doesn't reset NULL flag of that
column even if the server fills a column with rowid.
To keep each rowid unique, there is an unique index.
An insertion into an unique index takes into account NULL
flag of key value and ignores real data if NULL flag is set.
So, insertion of actually different rowids may lead to two
kind of problems. Visible effect of each of these problems
depends on an initial engine type of temporary table:
1. If multiupdate initially creates temporary table as
a MyISAM table (a table contains blob columns, and the
create_tmp_table function assumes, that this table is
large), it inserts only one single row and updates
only rows with one corresponding rowid. Other rows are
silently ignored.
2. If multiupdate initially creates MEMORY temporary
table, fills it with data and reaches size limit for
MEMORY tables (max_heap_table_size), multiupdate
converts MEMORY table into MyISAM table and fails
with an error:
ERROR 1022 (23000): Can't write; duplicate key in table ''
Multiupdate has been fixed to update the NULL flag of
temporary table rowid columns.
mysql-test/r/multi_update_tiny_hash.result:
Added test case for bug#36676.
mysql-test/t/multi_update_tiny_hash-master.opt:
Added test case for bug#36676.
mysql-test/t/multi_update_tiny_hash.test:
Added test case for bug#36676.
sql/sql_update.cc:
Fixed bug#36676: multiupdate using LEFT JOIN updates only
first row or fails with an error:
ERROR 1022 (23000): Can't write; duplicate key in table ''
The multi_update::send_data method has been modified to reset null bits of
fields containing rowids.
temporary variables of 'long' types were used to store ulong values,
that causes init_key_cache to receive distorted parameters
sql/handler.cc:
Bug #36705 key_buffer_size of >= 2G allocates all availabel virtual memory on 64-bit wondo.
types of temporary variables changed to match init_key_cache() parameters
master also, so that we can visually see the slave is the same.
mysql-test/r/rpl_sp.result:
SHOW CREATE on master also.
mysql-test/t/rpl_sp.test:
SHOW CREATE on master also.
with dependent subqueries
An IN subquery is executed on EXPLAIN when it's not correlated.
If the subquery required a temporary table for its execution
not all the internal structures were restored from pointing to
the items of the temporary table to point back to the items of
the subquery.
Fixed by restoring the ref array when a temp tables were used in
executing the IN subquery during EXPLAIN EXTENDED.
mysql-test/r/subselect.result:
Bug #36011: test case
mysql-test/t/subselect.test:
Bug #36011: test case
sql/sql_select.cc:
Bug #36011: restore the ref array after execution
when there were temp tables.
mysql-test/r/rpl_sp.result:
Add binlog results to show that they're written correctly.
mysql-test/t/rpl_sp.test:
Add binlog results to show that they're written correctly.
slave
The stored-routine code took the contents of the (lowest) parser
and copied it directly to the binlog, which causes problems if there
is a special case of interpretation at the parser level -- which
there is, in the "/*!VER */" comments. The trailing "*/" caused
errors on the slave, naturally.
Now, since by that point we have /properly/ created parse-tree (as
the rest of the server should do!) for the stored-routine CREATE, we
can construct a perfect statement from that information, instead of
writing uncertain information from an unknown parser state.
Fortunately, there's already a function nearby that does exactly
that.
---
Update for Bug#36570. Qualify routine names with db name when
writing to the binlog ONLY if the source text is qualified.
mysql-test/r/binlog_innodb.result:
Offsets changed due to quoting.
---
New offset to account for db-qualified names.
mysql-test/r/ctype_cp932_binlog.result:
Offsets changed due to quoting.
---
Qualify routine names with DB. Offsets change also.
mysql-test/r/mysqlbinlog.result:
Case changed in result due to interpretation of data instead of
literal recitation.
---
Qualify procedure name with db.
mysql-test/r/rpl_sp.result:
Offsets changed due to quoting. Added tests.
---
Qualify routine names with DB if qualified in query. Offsets change also.
mysql-test/t/rpl_sp.test:
Add version-limiting quotes to exercise bug#36570. Test that
backtick-quoted identifiers and labels work also.
---
Use different db to show qualification works. Qualify routine names
with DB if qualified in query.
sql/sp.cc:
In create_string, we may not have a sp_name parameter yet, so
instead pass the char* and length of the only member we'd get out
of it.
Having done that, we can use the same function to write the
CREATE (FUNC|TRIG|PROC) statement to the binlog as we always used
to display the statement to the user.
---
Make the db name part of the CREATE string if it is specified.
Specify it in part of writing to the binlog when creating a new
routine.
sql/sp_head.cc:
Set the sp_head m_explicit_name member as the sp_name member is set.
We can not peek at this later, as the sp_name is gone by then.
sql/sp_head.h:
Add a member to track whether the name is qualified with the
database.
with previous rows.
The WHERE clause containing expression:
CONCAT(empty_field1, empty_field2, ..., 'literal constant', ...)
REGEXP 'regular expression'
may return wrong matches.
Optimization of the CONCAT function has been fixed.
mysql-test/r/func_concat.result:
Added test case for bug #36488.
mysql-test/t/func_concat.test:
Added test case for bug #36488.
sql/item_strfunc.cc:
Fixed bug #36488.
The Item_func_concat::val_str method is optimized to
use first non-empty argument of the CONCAT function for in-place
result accumulation. This optimization is acceptable if that
first argument is not a constant.
However, current implementation checks this condition only for
the first actual argument of the CONCAT function.
So, the Item_func_concat::val_str method can corrupt values
of, for example, literal strings by appending random data.
The Item_func_concat::val_str method has been modified to take
into account the ability to be modified in-place for the first
non-empty argument.
into mysql.com:/home/kent/bk/mysql-5.0-release-merge
BUILD/Makefile.am:
Auto merged
mysql-test/Makefile.am:
Auto merged
mysql-test/mysql-test-run.pl:
Auto merged
mysql-test/std_data/funcs_1/innodb_tb1.txt:
Auto merged
mysql-test/std_data/funcs_1/innodb_tb2.txt:
Auto merged
mysql-test/std_data/funcs_1/innodb_tb3.txt:
Auto merged
mysql-test/std_data/funcs_1/innodb_tb4.txt:
Auto merged
mysql-test/std_data/funcs_1/memory_tb1.txt:
Auto merged
mysql-test/std_data/funcs_1/memory_tb2.txt:
Auto merged
mysql-test/std_data/funcs_1/memory_tb3.txt:
Auto merged
mysql-test/std_data/funcs_1/memory_tb4.txt:
Auto merged
mysql-test/std_data/funcs_1/myisam_tb1.txt:
Auto merged
mysql-test/std_data/funcs_1/myisam_tb2.txt:
Auto merged
mysql-test/std_data/funcs_1/myisam_tb3.txt:
Auto merged
mysql-test/std_data/funcs_1/myisam_tb4.txt:
Auto merged
mysql-test/std_data/funcs_1/t3.txt:
Auto merged
mysql-test/std_data/funcs_1/t4.txt:
Auto merged
mysql-test/std_data/funcs_1/t7.txt:
Auto merged
mysql-test/std_data/funcs_1/t9.txt:
Auto merged
mysql-test/suite/funcs_1/README.txt:
Auto merged
mysql-test/suite/funcs_1/datadict/datadict_bug_12777.inc:
Auto merged
mysql-test/suite/funcs_1/datadict/datadict_load.inc:
Auto merged
mysql-test/suite/funcs_1/include/innodb_tb1.inc:
Auto merged
mysql-test/suite/funcs_1/include/innodb_tb2.inc:
Auto merged
mysql-test/suite/funcs_1/include/innodb_tb3.inc:
Auto merged
mysql-test/suite/funcs_1/include/innodb_tb4.inc:
Auto merged
mysql-test/suite/funcs_1/include/memory_tb1.inc:
Auto merged
mysql-test/suite/funcs_1/include/memory_tb2.inc:
Auto merged
mysql-test/suite/funcs_1/include/memory_tb3.inc:
Auto merged
mysql-test/suite/funcs_1/include/memory_tb4.inc:
Auto merged
mysql-test/suite/funcs_1/include/myisam_tb1.inc:
Auto merged
mysql-test/suite/funcs_1/include/myisam_tb2.inc:
Auto merged
mysql-test/suite/funcs_1/include/myisam_tb3.inc:
Auto merged
mysql-test/suite/funcs_1/include/myisam_tb4.inc:
Auto merged
mysql-test/suite/funcs_1/include/sp_tb.inc:
Auto merged
mysql-test/suite/funcs_1/r/innodb_func_view.result:
Auto merged
mysql-test/suite/funcs_1/r/innodb_storedproc_02.result:
Auto merged
mysql-test/suite/funcs_1/r/innodb_storedproc_03.result:
Auto merged
mysql-test/suite/funcs_1/r/innodb_storedproc_06.result:
Auto merged
mysql-test/suite/funcs_1/r/innodb_storedproc_07.result:
Auto merged
mysql-test/suite/funcs_1/r/innodb_storedproc_08.result:
Auto merged
mysql-test/suite/funcs_1/r/innodb_storedproc_10.result:
Auto merged
mysql-test/suite/funcs_1/r/innodb_trig_0102.result:
Auto merged
mysql-test/suite/funcs_1/r/innodb_trig_03.result:
Auto merged
mysql-test/suite/funcs_1/r/innodb_trig_0407.result:
Auto merged
mysql-test/suite/funcs_1/r/innodb_trig_08.result:
Auto merged
mysql-test/suite/funcs_1/r/innodb_trig_09.result:
Auto merged
mysql-test/suite/funcs_1/r/innodb_trig_1011ext.result:
Auto merged
mysql-test/suite/funcs_1/r/innodb_trig_frkey.result:
Auto merged
mysql-test/suite/funcs_1/r/innodb_views.result:
Auto merged
mysql-test/suite/funcs_1/r/is_columns_innodb.result:
Auto merged
mysql-test/suite/funcs_1/r/is_columns_memory.result:
Auto merged
mysql-test/suite/funcs_1/r/is_columns_myisam.result:
Auto merged
mysql-test/suite/funcs_1/r/is_columns_ndb.result:
Auto merged
mysql-test/suite/funcs_1/r/is_tables_innodb.result:
Auto merged
mysql-test/suite/funcs_1/r/is_tables_memory.result:
Auto merged
mysql-test/suite/funcs_1/r/is_tables_myisam.result:
Auto merged
mysql-test/suite/funcs_1/r/is_tables_ndb.result:
Auto merged
mysql-test/suite/funcs_1/r/memory_func_view.result:
Auto merged
mysql-test/suite/funcs_1/r/memory_storedproc_02.result:
Auto merged
mysql-test/suite/funcs_1/r/memory_storedproc_03.result:
Auto merged
mysql-test/suite/funcs_1/r/memory_storedproc_06.result:
Auto merged
mysql-test/suite/funcs_1/r/memory_storedproc_07.result:
Auto merged
mysql-test/suite/funcs_1/r/memory_storedproc_08.result:
Auto merged
mysql-test/suite/funcs_1/r/memory_storedproc_10.result:
Auto merged
mysql-test/suite/funcs_1/r/memory_trig_0102.result:
Auto merged
mysql-test/suite/funcs_1/r/memory_trig_03.result:
Auto merged
mysql-test/suite/funcs_1/r/memory_trig_0407.result:
Auto merged
mysql-test/suite/funcs_1/r/memory_trig_08.result:
Auto merged
mysql-test/suite/funcs_1/r/memory_trig_09.result:
Auto merged
mysql-test/suite/funcs_1/r/memory_trig_1011ext.result:
Auto merged
mysql-test/suite/funcs_1/r/memory_views.result:
Auto merged
mysql-test/suite/funcs_1/r/myisam_func_view.result:
Auto merged
mysql-test/suite/funcs_1/r/myisam_storedproc_02.result:
Auto merged
mysql-test/suite/funcs_1/r/myisam_storedproc_03.result:
Auto merged
mysql-test/suite/funcs_1/r/myisam_storedproc_06.result:
Auto merged
mysql-test/suite/funcs_1/r/myisam_storedproc_07.result:
Auto merged
mysql-test/suite/funcs_1/r/myisam_storedproc_08.result:
Auto merged
mysql-test/suite/funcs_1/r/myisam_storedproc_10.result:
Auto merged
mysql-test/suite/funcs_1/r/myisam_trig_0102.result:
Auto merged
mysql-test/suite/funcs_1/r/myisam_trig_03.result:
Auto merged
mysql-test/suite/funcs_1/r/myisam_trig_0407.result:
Auto merged
mysql-test/suite/funcs_1/r/myisam_trig_08.result:
Auto merged
mysql-test/suite/funcs_1/r/myisam_trig_09.result:
Auto merged
mysql-test/suite/funcs_1/r/myisam_trig_1011ext.result:
Auto merged
mysql-test/suite/funcs_1/r/myisam_views.result:
Auto merged
mysql-test/suite/funcs_1/storedproc/cleanup_sp_tb.inc:
Auto merged
mysql-test/suite/funcs_1/storedproc/load_sp_tb.inc:
Auto merged
mysql-test/suite/funcs_1/storedproc/storedproc_02.inc:
Auto merged
mysql-test/suite/funcs_1/storedproc/storedproc_03.inc:
Auto merged
mysql-test/suite/funcs_1/storedproc/storedproc_06.inc:
Auto merged
mysql-test/suite/funcs_1/storedproc/storedproc_10.inc:
Auto merged
mysql-test/suite/funcs_1/t/innodb_trig_0407.test:
Auto merged
mysql-test/suite/funcs_1/t/is_basics_mixed.test:
Auto merged
mysql-test/suite/funcs_1/t/memory_storedproc_02.test:
Auto merged
mysql-test/suite/funcs_1/t/memory_storedproc_03.test:
Auto merged
mysql-test/suite/funcs_1/t/memory_storedproc_06.test:
Auto merged
mysql-test/suite/funcs_1/t/memory_storedproc_07.test:
Auto merged
mysql-test/suite/funcs_1/t/memory_storedproc_08.test:
Auto merged
mysql-test/suite/funcs_1/t/memory_storedproc_10.test:
Auto merged
mysql-test/suite/funcs_1/t/myisam_storedproc_02.test:
Auto merged
mysql-test/suite/funcs_1/t/myisam_storedproc_03.test:
Auto merged
mysql-test/suite/funcs_1/t/myisam_storedproc_06.test:
Auto merged
mysql-test/suite/funcs_1/t/myisam_storedproc_07.test:
Auto merged
mysql-test/suite/funcs_1/t/myisam_storedproc_08.test:
Auto merged
mysql-test/suite/funcs_1/t/myisam_storedproc_10.test:
Auto merged
mysql-test/suite/funcs_1/triggers/trig_frkey2.inc:
Auto merged
mysql-test/suite/funcs_1/triggers/triggers_0102.inc:
Auto merged
mysql-test/suite/funcs_1/triggers/triggers_03.inc:
Auto merged
mysql-test/suite/funcs_1/triggers/triggers_0407.inc:
Auto merged
mysql-test/suite/funcs_1/triggers/triggers_08.inc:
Auto merged
mysql-test/suite/funcs_1/triggers/triggers_09.inc:
Auto merged
mysql-test/suite/funcs_1/triggers/triggers_1011ext.inc:
Auto merged
mysql-test/suite/funcs_1/views/func_view.inc:
Auto merged
mysql-test/suite/funcs_1/views/views_master.inc:
Auto merged
BitKeeper/deleted/.del-load_file.txt:
Delete: mysql-test/std_data/funcs_1/load_file.txt
The REPAIR TABLE ... USE_FRM query silently corrupts data of tables
with old .FRM file version.
The mysql_upgrade client program or the REPAIR TABLE query (without
the USE_FRM clause) can't prevent this trouble, because in the
common case they don't upgrade .FRM file to compatible structure.
1. Evaluation of the REPAIR TABLE ... USE_FRM query has been
modified to reject such tables with the message:
"Failed repairing incompatible .FRM file".
2. REPAIR TABLE query (without USE_FRM clause) evaluation has been
modified to upgrade .FRM files to current version.
3. CHECK TABLE ... FOR UPGRADE query evaluation has been modified
to return error status when .FRM file has incompatible version.
4. mysql_upgrade and mysqlcheck client programs call CHECK TABLE
FOR UPGRADE and REPAIR TABLE queries, so their behaviors have
been changed too to upgrade .FRM files with incompatible
version numbers.
mysql-test/std_data/bug36055.MYD:
Added test data for bug #36055.
mysql-test/std_data/bug36055.MYI:
Added test data for bug #36055.
mysql-test/std_data/bug36055.frm:
Added test data for bug #36055.
mysql-test/r/repair.result:
Added test case for bug# 36055.
mysql-test/t/repair.test:
Added test case for bug# 36055.
sql/handler.cc:
Fixed bug #36055: mysql_upgrade doesn't really 'upgrade' tables
The handler::ha_check_for_upgrade method has been modified to
return error if .FRM file has incompatible version number.
sql/sql_table.cc:
Fixed bug #36055: mysql_upgrade doesn't really 'upgrade' tables
The prepare_for_repair function has been modified to reject
REPAIR TABLE ... USE_FRM queries on incompatible .FRM files
with the message: "Failed repairing incompatible .FRM file".