Fix for bug #22271: data casting may affect data stored in the next column(s?)

Using wrong filling value may cause unneeded extra bit rewriting.

Fix: use proper value to fill uneven bits.
parent d1fb415a
......@@ -602,4 +602,12 @@ NULL NULL
0 0
11111111 11111111
drop table bug15583;
create table t1(a bit(1), b smallint unsigned);
insert into t1 (b, a) values ('2', '1');
Warnings:
Warning 1264 Out of range value adjusted for column 'a' at row 1
select hex(a), b from t1;
hex(a) b
1 2
drop table t1;
End of 5.0 tests
......@@ -252,5 +252,13 @@ select hex(b + 0), bin(b + 0), oct(b + 0), hex(n), bin(n), oct(n) from bug15583;
select conv(b, 10, 2), conv(b + 0, 10, 2) from bug15583;
drop table bug15583;
#
# Bug #22271: data casting may affect data stored in the next column(s?)
#
create table t1(a bit(1), b smallint unsigned);
insert into t1 (b, a) values ('2', '1');
select hex(a), b from t1;
drop table t1;
--echo End of 5.0 tests
......@@ -7921,7 +7921,7 @@ int Field_bit::store(const char *from, uint length, CHARSET_INFO *cs)
(delta == -1 && (uchar) *from > ((1 << bit_len) - 1)) ||
(!bit_len && delta < 0))
{
set_rec_bits(0xff, bit_ptr, bit_ofs, bit_len);
set_rec_bits((1 << bit_len) - 1, bit_ptr, bit_ofs, bit_len);
memset(ptr, 0xff, bytes_in_rec);
if (table->in_use->really_abort_on_warning())
set_warning(MYSQL_ERROR::WARN_LEVEL_ERROR, ER_DATA_TOO_LONG, 1);
......
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