diff options
author | unknown <ram@gw.mysql.r18.ru> | 2004-12-02 15:06:15 +0400 |
---|---|---|
committer | unknown <ram@gw.mysql.r18.ru> | 2004-12-02 15:06:15 +0400 |
commit | 33a4b35ec8199af03eb1b5b64e47c9e940f253b1 (patch) | |
tree | 0abdb88691a13b1e98fb80390bdf9a8d804f4853 | |
parent | 38487139569d566d0a51ab59110d37fdac203f86 (diff) | |
download | mariadb-git-33a4b35ec8199af03eb1b5b64e47c9e940f253b1.tar.gz |
A fix (bug #6878: Crash with engine=memory).
heap/hp_create.c:
A fix (bug #6878: Crash with engine=memory).
Record length should be >= sizeof(byte*).
-rw-r--r-- | heap/hp_create.c | 7 | ||||
-rw-r--r-- | mysql-test/r/heap.result | 9 | ||||
-rw-r--r-- | mysql-test/t/heap.test | 10 |
3 files changed, 26 insertions, 0 deletions
diff --git a/heap/hp_create.c b/heap/hp_create.c index d1783118c0d..fdfe78a1e09 100644 --- a/heap/hp_create.c +++ b/heap/hp_create.c @@ -41,6 +41,13 @@ int heap_create(const char *name, uint keys, HP_KEYDEF *keydef, { HP_KEYDEF *keyinfo; DBUG_PRINT("info",("Initializing new table")); + + /* + We have to store sometimes byte* del_link in records, + so the record length should be at least sizeof(byte*) + */ + set_if_bigger(reclength, sizeof (byte*)); + for (i= key_segs= max_length= 0, keyinfo= keydef; i < keys; i++, keyinfo++) { bzero((char*) &keyinfo->block,sizeof(keyinfo->block)); diff --git a/mysql-test/r/heap.result b/mysql-test/r/heap.result index 1f994b100e2..b1cd17b444c 100644 --- a/mysql-test/r/heap.result +++ b/mysql-test/r/heap.result @@ -240,3 +240,12 @@ SELECT * FROM t1; pseudo date ZoomZip 1101106546 DROP TABLE t1; +create table t1(a char(2)) engine=memory; +insert into t1 values (NULL), (NULL); +delete from t1 where a is null; +insert into t1 values ('2'), ('3'); +select * from t1; +a +3 +2 +drop table t1; diff --git a/mysql-test/t/heap.test b/mysql-test/t/heap.test index 2eff36f3317..bc0b28370ec 100644 --- a/mysql-test/t/heap.test +++ b/mysql-test/t/heap.test @@ -185,3 +185,13 @@ DELETE FROM t1 WHERE date<1101106546; SELECT * FROM t1; DROP TABLE t1; +# +# Bug #6878: a problem with small length records +# + +create table t1(a char(2)) engine=memory; +insert into t1 values (NULL), (NULL); +delete from t1 where a is null; +insert into t1 values ('2'), ('3'); +select * from t1; +drop table t1; |