From 805655d8891cd421362f6894c28d8528c2e5922b Mon Sep 17 00:00:00 2001 From: "jonas@perch.ndb.mysql.com" <> Date: Mon, 2 Jan 2006 14:38:38 +0100 Subject: [PATCH] bug#16125 - ndb bitfield of exact 32 bits, incorrect assertion (i.e. only noticable in debug compiled) --- mysql-test/r/ndb_bitfield.result | 6 ++++++ mysql-test/t/ndb_bitfield.test | 8 ++++++++ ndb/include/util/Bitmask.hpp | 4 ++-- 3 files changed, 16 insertions(+), 2 deletions(-) diff --git a/mysql-test/r/ndb_bitfield.result b/mysql-test/r/ndb_bitfield.result index bf5a9b1ade1..9a941862854 100644 --- a/mysql-test/r/ndb_bitfield.result +++ b/mysql-test/r/ndb_bitfield.result @@ -208,3 +208,9 @@ b bit(9), key(b) ) engine=ndbcluster; ERROR HY000: Can't create table './test/t1.frm' (errno: 743) +create table t1 ( +pk1 int primary key, +b bit(32) not null +) engine=ndbcluster; +insert into t1 values (1,1); +drop table t1; diff --git a/mysql-test/t/ndb_bitfield.test b/mysql-test/t/ndb_bitfield.test index 0256ecf89ed..59d6e56577e 100644 --- a/mysql-test/t/ndb_bitfield.test +++ b/mysql-test/t/ndb_bitfield.test @@ -112,3 +112,11 @@ create table t1 ( key(b) ) engine=ndbcluster; +# bug#16125 +create table t1 ( + pk1 int primary key, + b bit(32) not null +) engine=ndbcluster; + +insert into t1 values (1,1); +drop table t1; diff --git a/ndb/include/util/Bitmask.hpp b/ndb/include/util/Bitmask.hpp index ade57a5ee57..7957bf7a48d 100644 --- a/ndb/include/util/Bitmask.hpp +++ b/ndb/include/util/Bitmask.hpp @@ -814,7 +814,7 @@ inline void BitmaskImpl::getField(unsigned size, const Uint32 src[], unsigned pos, unsigned len, Uint32 dst[]) { - assert(pos + len < (size << 5)); + assert(pos + len <= (size << 5)); src += (pos >> 5); Uint32 offset = pos & 31; @@ -833,7 +833,7 @@ inline void BitmaskImpl::setField(unsigned size, Uint32 dst[], unsigned pos, unsigned len, const Uint32 src[]) { - assert(pos + len < (size << 5)); + assert(pos + len <= (size << 5)); dst += (pos >> 5); Uint32 offset = pos & 31;