diff options
author | unknown <evgen@moonbone.local> | 2006-02-21 18:09:32 +0300 |
---|---|---|
committer | unknown <evgen@moonbone.local> | 2006-02-21 18:09:32 +0300 |
commit | 71ee8615c34db5299d51bc440309371ea08b5923 (patch) | |
tree | ae74b5f230c89a5d2c3fff3b419026ac31881893 /sql/sql_table.cc | |
parent | 387ae4abcf2d484aebe9eae6edcab81c8c9556f9 (diff) | |
download | mariadb-git-71ee8615c34db5299d51bc440309371ea08b5923.tar.gz |
Fixed bug#17530: Incorrect key truncation on table creation caused server crash.
When a too long field is used for a key, only a prefix part of the field is
used. Length is reduced to the max key length allowed for storage. But if the
field have a multibyte charset it is possible to break multibyte char
sequence. This leads to the failed assertion in the innodb code and
server crash when a record is inserted.
The make_prepare_table() now aligns truncated key length to the boundary of
multibyte char.
mysql-test/t/create.test:
Added test case for bug#17530: Incorrect key truncation on table creation caused server crash.
mysql-test/r/create.result:
Added test case for bug#17530: Incorrect key truncation on table creation caused server crash.
sql/sql_table.cc:
Fixed bug#17530: Incorrect key truncation on table creation caused server crash.
The make_prepare_table() now aligns truncated key length to the boundary of
multibyte char.
Diffstat (limited to 'sql/sql_table.cc')
-rw-r--r-- | sql/sql_table.cc | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/sql/sql_table.cc b/sql/sql_table.cc index de350b83985..a84d70f7835 100644 --- a/sql/sql_table.cc +++ b/sql/sql_table.cc @@ -1299,7 +1299,9 @@ static int mysql_prepare_table(THD *thd, HA_CREATE_INFO *create_info, } if (length > file->max_key_part_length() && key->type != Key::FULLTEXT) { - length=file->max_key_part_length(); + length= file->max_key_part_length(); + /* Align key length to multibyte char boundary */ + length-= length % sql_field->charset->mbmaxlen; if (key->type == Key::MULTIPLE) { /* not a critical problem */ |