summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSergei Golubchik <serg@mariadb.org>2017-01-12 00:33:21 +0100
committerSergei Golubchik <serg@mariadb.org>2017-01-15 07:41:13 +0100
commit5dfab33c4ec54082daf034da99c4a796410fe4f3 (patch)
treed3063943c2eededdafdbfe1f5eb1b8075dd2ade6
parent7e2f9d092dd1fb6b0fa1a8fdd5d1f3af68b56f45 (diff)
downloadmariadb-git-5dfab33c4ec54082daf034da99c4a796410fe4f3.tar.gz
MDEV-11551 Server crashes in Field::is_real_null
sometimes table->s->stored_fields is less than table->s->null_fields
-rw-r--r--mysql-test/r/trigger_null-8605.result10
-rw-r--r--mysql-test/t/trigger_null-8605.test14
-rw-r--r--sql/sql_trigger.cc2
3 files changed, 25 insertions, 1 deletions
diff --git a/mysql-test/r/trigger_null-8605.result b/mysql-test/r/trigger_null-8605.result
index b187fc19554..10315988708 100644
--- a/mysql-test/r/trigger_null-8605.result
+++ b/mysql-test/r/trigger_null-8605.result
@@ -354,3 +354,13 @@ show columns from t1;
Field Type Null Key Default Extra
a int(11) NO PRI NULL
drop table t1;
+create table t1 (
+pk int primary key,
+i int,
+v1 int as (i) virtual,
+v2 int as (i) virtual
+);
+create trigger tr before update on t1 for each row set @a = 1;
+insert into t1 (pk, i) values (null, null);
+ERROR 23000: Column 'pk' cannot be null
+drop table t1;
diff --git a/mysql-test/t/trigger_null-8605.test b/mysql-test/t/trigger_null-8605.test
index 748768a1849..34a57654b48 100644
--- a/mysql-test/t/trigger_null-8605.test
+++ b/mysql-test/t/trigger_null-8605.test
@@ -373,3 +373,17 @@ show columns from t1;
insert into t1 (a) values (3);
show columns from t1;
drop table t1;
+
+#
+# MDEV-11551 Server crashes in Field::is_real_null
+#
+create table t1 (
+ pk int primary key,
+ i int,
+ v1 int as (i) virtual,
+ v2 int as (i) virtual
+);
+create trigger tr before update on t1 for each row set @a = 1;
+--error ER_BAD_NULL_ERROR
+insert into t1 (pk, i) values (null, null);
+drop table t1;
diff --git a/sql/sql_trigger.cc b/sql/sql_trigger.cc
index 7a61279fc9c..7bfc1e950b5 100644
--- a/sql/sql_trigger.cc
+++ b/sql/sql_trigger.cc
@@ -1082,7 +1082,7 @@ bool Table_triggers_list::prepare_record_accessors(TABLE *table)
&& (table->s->stored_fields != table->s->null_fields))
{
- int null_bytes= (table->s->stored_fields - table->s->null_fields + 7)/8;
+ int null_bytes= (table->s->fields - table->s->null_fields + 7)/8;
if (!(extra_null_bitmap= (uchar*)alloc_root(&table->mem_root, null_bytes)))
return 1;
if (!(record0_field= (Field **)alloc_root(&table->mem_root,