summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorunknown <ram@gw.mysql.r18.ru>2004-12-02 15:06:15 +0400
committerunknown <ram@gw.mysql.r18.ru>2004-12-02 15:06:15 +0400
commit33a4b35ec8199af03eb1b5b64e47c9e940f253b1 (patch)
tree0abdb88691a13b1e98fb80390bdf9a8d804f4853
parent38487139569d566d0a51ab59110d37fdac203f86 (diff)
downloadmariadb-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.c7
-rw-r--r--mysql-test/r/heap.result9
-rw-r--r--mysql-test/t/heap.test10
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;