Commit 0ee28e1a authored by unknown's avatar unknown

BUG#16489 - utf8 + fulltext leads to corrupt index file.

Fixed that UPDATE statement crashes multi-byte charset fulltext index.


myisam/ft_update.c:
  Fixed that UPDATE statement crashes multi-byte charset fulltext index.
  While updating, always rewrite multi-byte charset fulltext index.
mysql-test/r/fulltext2.result:
  Added a testcase for BUG#16489.
mysql-test/t/fulltext2.test:
  Added a testcase for BUG#16489.
parent ffe11393
...@@ -170,6 +170,10 @@ int _mi_ft_cmp(MI_INFO *info, uint keynr, const byte *rec1, const byte *rec2) ...@@ -170,6 +170,10 @@ int _mi_ft_cmp(MI_INFO *info, uint keynr, const byte *rec1, const byte *rec2)
FT_SEG_ITERATOR ftsi1, ftsi2; FT_SEG_ITERATOR ftsi1, ftsi2;
CHARSET_INFO *cs=info->s->keyinfo[keynr].seg->charset; CHARSET_INFO *cs=info->s->keyinfo[keynr].seg->charset;
DBUG_ENTER("_mi_ft_cmp"); DBUG_ENTER("_mi_ft_cmp");
#ifndef MYSQL_HAS_TRUE_CTYPE_IMPLEMENTATION
if (cs->mbmaxlen > 1)
DBUG_RETURN(THOSE_TWO_DAMN_KEYS_ARE_REALLY_DIFFERENT);
#endif
_mi_ft_segiterator_init(info, keynr, rec1, &ftsi1); _mi_ft_segiterator_init(info, keynr, rec1, &ftsi1);
_mi_ft_segiterator_init(info, keynr, rec2, &ftsi2); _mi_ft_segiterator_init(info, keynr, rec2, &ftsi2);
......
...@@ -234,5 +234,10 @@ insert into t1 values('test test '),('test'),('test'),('test'), ...@@ -234,5 +234,10 @@ insert into t1 values('test test '),('test'),('test'),('test'),
('test'),('test'),('test'),('test'),('test'),('test'),('test'),('test'), ('test'),('test'),('test'),('test'),('test'),('test'),('test'),('test'),
('test'),('test'),('test'),('test'),('test'),('test'),('test'),('test'); ('test'),('test'),('test'),('test'),('test'),('test'),('test'),('test');
delete from t1 limit 1; delete from t1 limit 1;
truncate table t1;
insert into t1 values('ab c d');
update t1 set a='ab c d';
select * from t1 where match a against('ab c' in boolean mode);
a
drop table t1; drop table t1;
set names latin1; set names latin1;
...@@ -209,6 +209,14 @@ insert into t1 values('test test '),('test'),('test'),('test'), ...@@ -209,6 +209,14 @@ insert into t1 values('test test '),('test'),('test'),('test'),
('test'),('test'),('test'),('test'),('test'),('test'),('test'),('test'), ('test'),('test'),('test'),('test'),('test'),('test'),('test'),('test'),
('test'),('test'),('test'),('test'),('test'),('test'),('test'),('test'); ('test'),('test'),('test'),('test'),('test'),('test'),('test'),('test');
delete from t1 limit 1; delete from t1 limit 1;
#
# BUG#16489: utf8 + fulltext leads to corrupt index file.
#
truncate table t1;
insert into t1 values('ab c d');
update t1 set a='ab c d';
select * from t1 where match a against('ab c' in boolean mode);
drop table t1; drop table t1;
set names latin1; set names latin1;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment