MariaDB server is a community developed fork of MySQL server. Started by core members of the original MySQL team, MariaDB actively works with outside developers to deliver the most featureful, stable, and sanely licensed open SQL server in the industry.
  • MariaDB\ 71.8%
  • C++ 16.4%
  • C 10.4%
  • Shell 0.5%
  • Perl 0.4%
  • Other 0.3%
Find a file
Vasil Dimov 86505c3c54 Fix Bug#13510739 63775: SERVER CRASH ON HANDLER READ NEXT AFTER DELETE RECORD.
CREATE TABLE bug13510739 (c INTEGER NOT NULL, PRIMARY KEY (c)) ENGINE=INNODB;
INSERT INTO bug13510739 VALUES (1), (2), (3), (4);
DELETE FROM bug13510739 WHERE c=2;
HANDLER bug13510739 OPEN;
HANDLER bug13510739 READ `primary` = (2);
HANDLER bug13510739 READ `primary` NEXT;  <-- crash

The bug is that in the particular testcase row_search_for_mysql() picked up
a delete-marked record and quit, leaving the cursor non-positioned state and
on the subsequent 'get next' call the code crashed because of the
non-positioned cursor.

In row0sel.cc (line numbers from mysql-trunk):

4653         if (rec_get_deleted_flag(rec, comp)) {
...
4679                 if (index == clust_index && unique_search) {
4680 
4681                         err = DB_RECORD_NOT_FOUND;
4682                         
4683                         goto normal_return;
4684                 }       

it quit from here, not storing the cursor position.

In contrast, if the record=2 is not found at all (e.g. sleep(1) after DELETE
to let the purge wipe it away completely) then 'get = 2' does find record=3
and quits from here:

4366                 if (0 != cmp_dtuple_rec(search_tuple, rec, offsets)) {
...
4394                         btr_pcur_store_position(pcur, &mtr);
4395 
4396                         err = DB_RECORD_NOT_FOUND;
4397 #if 0
4398                         ut_print_name(stderr, trx, FALSE, index->name);
4399                         fputs(" record not found 3\n", stderr);
4400 #endif
4401 
4402                         goto normal_return;

Another fix could be to extend the condition on line 4366 to hold only if
seach_tuple matches rec AND if rec is not delete marked.

Notice that in the above test case if we wait about 1 second somewhere after
DELETE and before 'get = 2', then the testcase does not crash and returns 4
instead. Not sure if this is the correct behavior, but this bugfix removes
the crash and makes the code return what it also returns in the non-crashing
case (if rec=2 is not found during 'get = 2', e.g. we have sleep(1) there).

Approved by:	Marko (http://bur03.no.oracle.com/rb/r/863/)
2011-12-22 12:55:44 +02:00
.bzr-mysql merge mysql-5.0-security->mysql-5.1-security 2011-08-17 13:25:33 +03:00
BitKeeper Merge trift2.:/MySQL/M51/mysql-5.1 2008-01-28 15:16:40 +01:00
BUILD Updated/added copyright headers 2011-06-30 17:37:13 +02:00
client Build broken for gcc 4.5.1 in optimized mode. 2011-11-29 15:52:47 +01:00
cmd-line-utils Patch to fix stdint.h missing from pre Solaris 10 versions. 2011-10-29 20:08:40 +02:00
config/ac-macros Bug#57991: Compiler flag change build error : adler32.c 2010-12-07 13:06:20 -02:00
dbug Merge 2010-12-29 00:47:05 +01:00
Docs Makefile.am: 2008-04-08 11:44:18 +02:00
extra 2nd fix for Bug #55713 innochecksum is NOT built with large file support enabled 2011-08-17 00:34:11 +02:00
include Bug#11761576 54082: HANDLE_SEGFAULT MAKES USE OF UNSAFE FUNCTIONS 2011-11-30 15:39:29 +01:00
libmysql Updated/added copyright headers 2011-07-03 17:47:37 +02:00
libmysql_r Merge from mysql-5.0-bugteam. 2010-11-24 13:07:37 +03:00
libmysqld Bug#11761576 54082: HANDLE_SEGFAULT MAKES USE OF UNSAFE FUNCTIONS 2011-11-30 15:39:29 +01:00
man Updated/added copyright headers 2011-06-30 17:37:13 +02:00
mysql-test Fix Bug#13510739 63775: SERVER CRASH ON HANDLER READ NEXT AFTER DELETE RECORD. 2011-12-22 12:55:44 +02:00
mysys Bug#11761576 54082: HANDLE_SEGFAULT MAKES USE OF UNSAFE FUNCTIONS 2011-11-30 15:39:29 +01:00
netware Bug #45058 init_available_charsets uses double checked locking 2009-12-12 19:11:25 +01:00
plugin Updated/added copyright headers 2011-07-03 17:47:37 +02:00
regex Updated/added copyright headers 2011-06-30 17:37:13 +02:00
scripts Bug#11765888 58898: MYSQL_INSTALL_DB: NOT ALL OPTIONS DOCUMENTED 2011-09-06 21:50:04 +05:30
server-tools Updated/added copyright headers 2011-06-30 17:37:13 +02:00
sql merge 2011-12-14 14:41:40 +01:00
sql-bench Updated/added copyright headers 2011-06-30 17:37:13 +02:00
sql-common Updated/added copyright headers 2011-07-03 17:47:37 +02:00
storage Fix Bug#13510739 63775: SERVER CRASH ON HANDLER READ NEXT AFTER DELETE RECORD. 2011-12-22 12:55:44 +02:00
strings merge 5.0-security => 5.1 security 2011-10-14 10:44:27 +02:00
support-files Fix bug#11886309: RPM UPGRADE OF MYSQL ADVANCED GPL TO MYSQL SERVER ADVANCED DOES NOT WORK 2011-10-04 15:58:19 +02:00
tests Fix Windows-build failure: use my_snprintf() instead of snprintf(). 2011-10-20 18:06:41 +04:00
unittest Updated/added copyright headers 2011-07-03 17:47:37 +02:00
vio Updated/added copyright headers 2011-07-03 17:47:37 +02:00
win Updated/added copyright headers 2011-07-03 17:47:37 +02:00
zlib The header "config.h" needs to be included "early" to control other headers. 2008-10-13 14:23:39 +02:00
.bzrignore Bug#12361113: CRASH WHEN "LOAD INDEX INTO CACHE" WITH TOO 2011-12-12 14:07:02 +01:00
.cvsignore Import changeset 2000-07-31 21:29:14 +02:00
CMakeLists.txt Updated/added copyright headers 2011-07-03 17:47:37 +02:00
configure.in Raise version number after cloning 5.1.61 2011-12-16 12:24:05 +01:00
COPYING Use a new version of "COPYING", the GPL text. 2010-03-04 14:26:27 +01:00
INSTALL-SOURCE ReadMe.txt, INSTALL-WIN-SOURCE, INSTALL-BINARY, INSTALL-SOURCE: 2007-11-23 10:15:55 +01:00
INSTALL-WIN-SOURCE ReadMe.txt, INSTALL-WIN-SOURCE, INSTALL-BINARY, INSTALL-SOURCE: 2007-11-23 10:15:55 +01:00
Makefile.am Merge 2010-12-29 00:47:05 +01:00
README Removed the "Third-Party Component Notices" part from README 2011-03-16 23:07:05 +01:00

MySQL Server 5.1

This is a release of MySQL, a dual-license SQL database server.
For the avoidance of doubt, this particular copy of the software 
is released under the version 2 of the GNU General Public License. 
MySQL is brought to you by Oracle.

Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved.

License information can be found in the COPYING file.

MySQL FOSS License Exception
We want free and open source software applications under certain
licenses to be able to use specified GPL-licensed MySQL client
libraries despite the fact that not all such FOSS licenses are
compatible with version 2 of the GNU General Public License.  
Therefore there are special exceptions to the terms and conditions 
of the GPLv2 as applied to these client libraries, which are 
identified and described in more detail in the FOSS License 
Exception at 
<http://www.mysql.com/about/legal/licensing/foss-exception.html>.

This distribution may include materials developed by third
parties. For license and attribution notices for these
materials, please refer to the documentation that accompanies
this distribution (see the "Licenses for Third-Party Components"
appendix) or view the online documentation at 
<http://dev.mysql.com/doc/>.

GPLv2 Disclaimer
For the avoidance of doubt, except that if any license choice
other than GPL or LGPL is available it will apply instead, 
Oracle elects to use only the General Public License version 2 
(GPLv2) at this time for any software where a choice of GPL 
license versions is made available with the language indicating 
that GPLv2 or any later version may be used, or where a choice 
of which version of the GPL is applied is otherwise unspecified.

For further information about MySQL or additional documentation, 
see:
- The latest information about MySQL: http://www.mysql.com
- The current MySQL documentation: http://dev.mysql.com/doc

Some Reference Manual sections of special interest:
- If you are migrating from an older version of MySQL, please 
  read the "Upgrading from..." section.
- To see what MySQL can do, take a look at the features section.
- For installation instructions, see the Installing and Upgrading
  chapter.
- For the new features/bugfix history, see the MySQL Change History 
  appendix.

You can browse the MySQL Reference Manual online or download it 
in any of several formats at the URL given earlier in this file.
Source distributions include a local copy of the manual in the
Docs directory.