Bug #41305 server crashes when inserting duplicate row into a merge table
Submitted: 8 Dec 2008 18:52 Modified: 15 Apr 3:44
Reporter: Balint Toth
Status: Closed
Category:Server: Merge Severity:S2 (Serious)
Version:5.0/5.1/6.0 OS:Linux (x86_64)
Assigned to: Anurag Shekhar Target Version:5.1+
Tags: regression, merge unique key
Triage: Triaged: D1 (Critical)

[8 Dec 2008 18:52] Balint Toth
Description:
Server crashes when trying to insert a duplicate row into a merge table. Inserting
directly into the merged table works, specifying "IGNORE" keyword also eliminates the
crash.

How to repeat:
DROP TABLE IF EXISTS `m`;

DROP TABLE IF EXISTS `m1`;
CREATE TABLE `m1` (
  `dt` datetime NOT NULL default '0000-00-00 00:00:00',
  `i` int(10) unsigned NOT NULL,
  PRIMARY KEY  (`dt`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

DROP TABLE IF EXISTS `m2`;
CREATE TABLE `m2` (
  `dt` datetime NOT NULL default '0000-00-00 00:00:00',
  `i` int(10) unsigned NOT NULL,
  PRIMARY KEY  (`dt`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

CREATE TABLE `m` (
  `dt` datetime NOT NULL,
  `i` int(10) unsigned NOT NULL
) ENGINE=MRG_MyISAM DEFAULT CHARSET=latin1 INSERT_METHOD=LAST UNION=(`m1`,`m2`);

insert into m (dt,i) values ("2008-12-08 10:00:00",1);
insert into m (dt,i) values ("2008-12-08 10:00:00",1);
[8 Dec 2008 20:51] Miguel Solorzano
Verified on 5.0 bzr tree. I will test 5.1/6.0

081208 17:49:46 [Note] /home/miguel/dbs/5.0/libexec/mysqld: ready for connections.
Version: '5.0.76-debug'  socket: '/tmp/mysql.sock'  port: 3306  Source distribution
[New Thread 0x40b8f950 (LWP 28860)]

Program received signal SIGSEGV, Segmentation fault.
[Switching to Thread 0x40b8f950 (LWP 28860)]
0x0000000000599ec3 in Field::val_str (this=0xb318db, str=0x40b8c620) at field.h:117
117       inline String *val_str(String *str) { return val_str(str, str); }
(gdb)
[8 Dec 2008 21:04] Miguel Solorzano
Thank you for the bug report. Verified on 5.1 and 6.0 too. Older release 5.0.22 don't
crash.
[15 Dec 2008 23:18] Omer BarNir
setting a PK on the merge table prevents the crash in the above scenario
[24 Feb 13:52] Bugs System
A patch for this bug has been committed. After review, it may
be pushed to the relevant source trees for release in the next
version. You can access the patch from:

  http://lists.mysql.com/commits/67364

2810 Anurag Shekhar	2009-02-24
      Bug#41305 server crashes when inserting duplicate row into a merge table
      
      This problem comes while inserting a duplicate row in merge table 
      without key but the child table has a primary key. 
      While forming the error message handler tries to locate the key field
      which is creating this problem but as there is no key on the merge 
      table there is a segmentation fault.
      
      An additional check to ensure that the key fields are present 
      fixes this problem.
[26 Feb 11:10] Bugs System
A patch for this bug has been committed. After review, it may
be pushed to the relevant source trees for release in the next
version. You can access the patch from:

  http://lists.mysql.com/commits/67657

2824 Anurag Shekhar	2009-02-26
      Bug#41305 server crashes when inserting duplicate row into a merge table
      
      This problem comes while inserting a duplicate row in merge table 
      without key but the child table has a primary key. 
      While forming the error message handler tries to locate the key field
      which is creating this problem but as there is no key on the merge 
      table there is a segmentation fault.
[4 Mar 10:18] Bugs System
A patch for this bug has been committed. After review, it may
be pushed to the relevant source trees for release in the next
version. You can access the patch from:

  http://lists.mysql.com/commits/68182

2832 Anurag Shekhar	2009-03-04
      Bug#41305 server crashes when inserting duplicate row into a merge table
      
      This problem comes while inserting a duplicate row in merge table 
      without key but the child table has a primary key. 
      While forming the error message handler tries to locate the key field
      which is creating this problem but as there is no key on the merge
      table there is a segmentation fault.
[6 Mar 15:18] Ingo Strüwing
Approved. All looks good. No comments.
[9 Mar 9:43] Bugs System
A patch for this bug has been committed. After review, it may
be pushed to the relevant source trees for release in the next
version. You can access the patch from:

  http://lists.mysql.com/commits/68591

2837 He Zhenxing	2009-03-09 [merge]
      Auto merge
[13 Mar 20:03] Bugs System
Pushed into 5.1.33 (revid:joro@sun.com-20090313111355-7bsi1hgkvrg8pdds) (version source
revid:zhou.li@sun.com-20090311061050-ihp0g77znonq1tuq) (merge vers: 5.1.33) (pib:6)
[18 Mar 14:21] Bugs System
Pushed into 6.0.11-alpha (revid:joro@sun.com-20090318122208-1b5kvg6zeb4hxwp9) (version
source revid:matthias.leich@sun.com-20090310140952-gwtoq87wykhji3zi) (merge vers:
6.0.11-alpha) (pib:6)
[15 Apr 3:44] Paul DuBois
Noted in 5.1.33, 6.0.11 changelogs.

If the tables underlying a MERGE table had a primary key but the
MERGE table itself did not, inserting a duplicate row into the MERGE
table caused a server crash.
[9 May 18:41] Bugs System
Pushed into 5.1.34-ndb-6.2.18 (revid:jonas@mysql.com-20090508185236-p9b3as7qyauybefl)
(version source revid:jonas@mysql.com-20090508100057-30ote4xggi4nq14v) (merge vers:
5.1.33-ndb-6.2.18) (pib:6)
[9 May 19:38] Bugs System
Pushed into 5.1.34-ndb-6.3.25 (revid:jonas@mysql.com-20090509063138-1u3q3v09wnn2txyt)
(version source revid:jonas@mysql.com-20090508175813-s6yele2z3oh6o99z) (merge vers:
5.1.33-ndb-6.3.25) (pib:6)
[9 May 20:35] Bugs System
Pushed into 5.1.34-ndb-7.0.6 (revid:jonas@mysql.com-20090509154927-im9a7g846c6u1hzc)
(version source revid:jonas@mysql.com-20090509073226-09bljakh9eppogec) (merge vers:
5.1.33-ndb-7.0.6) (pib:6)