Bug #33379 valgrind error in parts/partition_bit_myisam
| Submitted: | 19 Dec 2007 19:10 | Modified: | 28 Mar 2008 15:07 |
|---|---|---|---|
| Reporter: | Mattias Jonsson | Email Updates: | |
| Status: | Closed | Impact on me: | |
| Category: | MySQL Server: Partitions | Severity: | S3 (Non-critical) |
| Version: | OS: | Any | |
| Assigned to: | Mattias Jonsson | CPU Architecture: | Any |
[19 Dec 2007 20:11]
Mattias Jonsson
suggested fix is wrong! better to fix by changing pack_length_in_rec() function instead.
[1 Feb 2008 9:58]
Mattias Jonsson
As Kristian Nielsen proposed: The problem lies in Field::hash (which Field_bit is using). I will try to implement the Field_bit::hash function using my_charset_bin.coll->hash_sort() with a correct buffer.
[4 Feb 2008 11:28]
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/41633 ChangeSet@1.2516, 2008-02-04 12:28:42+01:00, mattiasj@client-10-129-10-147.upp.off.mysql.com +4 -0 Bug#33379: valgrind error in parts/partition_bit_myisam Problem was that Field_bit used Field::hash() function that did not know about using null-byte for storing bits. Resulting in wrong length, which was caught by valgrind. Soluiton: created a Field_bit::hash() that uses Field_bit::val_int() and my_charset_bin-collation function hash_sort.
[4 Feb 2008 15:32]
Mattias Jonsson
As Kristian commented, the previous patch was endianess dependent, I will remake it endian independent, using mi_intNstore into a local buffer.
[7 Feb 2008 9:13]
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/41855 ChangeSet@1.2516, 2008-02-07 10:12:56+01:00, mattiasj@witty.ndb.mysql.com +4 -0 Bug#33379: valgrind error in parts/partition_bit_myisam Problem was that Field_bit used Field::hash() function that did not know about using null-byte for storing bits. Resulting in wrong length, which was caught by valgrind. Solution: created a Field_bit::hash() that uses Field_bit::val_int() and my_charset_bin-collation function hash_sort. Also use the store function for platform independs
[7 Feb 2008 11:11]
Mattias Jonsson
Discussed with Mikael, and we decided to change the switch/case to use the mi_int8store directly. new patch will be committed soon
[7 Feb 2008 11:28]
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/41860 ChangeSet@1.2516, 2008-02-07 12:28:38+01:00, mattiasj@witty.local +4 -0 Bug#33379: valgrind error in parts/partition_bit_myisam Problem was that Field_bit used Field::hash() function that did not know about using null-byte for storing bits. Resulting in wrong length, which was caught by valgrind. Solution: created a Field_bit::hash() that uses Field_bit::val_int() and my_charset_bin-collation function hash_sort. Also use the store function for platform independs
[7 Feb 2008 18:45]
Mattias Jonsson
Pushed into mysql-6.0-engines and mysql-5.1-engines
[27 Mar 2008 11:21]
Bugs System
Pushed into 5.1.24-rc
[27 Mar 2008 17:53]
Bugs System
Pushed into 6.0.5-alpha
[28 Mar 2008 9:41]
Jon Stephens
There don't appear to be any user-visible changes here; closed bug without taking further action.
[28 Mar 2008 9:51]
Kristian Nielsen
I think the user-visible change here is that before this fix, PARTITION BY KEY on bitfields did not work correctly. I think rows could end up in the wrong partition, causing wrong results to be returned from queries or other similar problems. We do not have a testcase for this though. Still, might be good to document that this bug fixes potential problems with PARTITION BY KEY on bitfield columns.
[28 Mar 2008 9:53]
Jon Stephens
Setting this back to Documenting status per developer comment above.
[28 Mar 2008 15:07]
Jon Stephens
Documented bugfix as follows in the 5.1.24 and 6.0.5 changelogs:
A table defined using PARTITION BY KEY and having a BIT column referenced
in the partitioning key did not behave correctly; some rows could be
inserted into the wrong partition, causing wrong results to be returned
from queries.
[2 Apr 2008 16:03]
Jon Stephens
Also noted fix in the 5.1.23-ndb-6.3.11 changelog.
Portions of this website are copyright © 2001, 2002 The PHP Group
Page generated in 0.059 sec. using MySQL 8.4.7-u6-cloud
Timestamp references displayed by the system are UTC.
Content reproduced on this site is the property of the
respective copyright holders.
It is not reviewed in advance
by Oracle and does not necessarily represent the opinion of
Oracle or any other party.
Description: test case partition_bit_myisam.test in suite parts fails with valgrind errors How to repeat: compile with valgrind ./mtr --valgrind --suite=parts partition_bit_myisam Suggested fix: --- 1.424/sql/field.cc 2007-12-05 23:31:15 +01:00 +++ edited/sql/field.cc 2007-12-19 19:59:40 +01:00 @@ -8774,7 +8774,7 @@ : Field(ptr_arg, len_arg, null_ptr_arg, null_bit_arg, unireg_check_arg, field_name_arg), bit_ptr(bit_ptr_arg), bit_ofs(bit_ofs_arg), bit_len(len_arg & 7), - bytes_in_rec(len_arg / 8) + bytes_in_rec((len_arg + 7) / 8) { flags|= UNSIGNED_FLAG; /* I.e. field is created with wrong number of bytes in record, affects field->pack_lenght_in_rec() function that is used in partitioning.