Browse Source

MDEV-10352 Server crashes in Field::set_default on CREATE TABLE

fix Item_default_value not to pretend being const_item
if the field's default_value expression isn't parsed yet
pull/313/head
Sergei Golubchik 9 years ago
parent
commit
d2f84ab978
  1. 2
      mysql-test/r/default.result
  2. 6
      mysql-test/t/default.test
  3. 8
      sql/item.cc

2
mysql-test/r/default.result

@ -3362,4 +3362,6 @@ a b t
4 5 4 also expression DEFAULT(0)+0
4 5 5 the value of the DEFAULT(a), that is b
drop table t1;
create table t1 (col1 int default(-(default(col1))));
ERROR 01000: Expression for field `col1` is refering to uninitialized field `col1`
# end of 10.2 test

6
mysql-test/t/default.test

@ -2069,4 +2069,10 @@ insert into t1 values (b, 5, '5 the value of the DEFAULT(a), that is b');
select * from t1 order by t;
drop table t1;
#
# MDEV-10352 Server crashes in Field::set_default on CREATE TABLE
#
--error ER_EXPRESSION_REFERS_TO_UNINIT_FIELD
create table t1 (col1 int default(-(default(col1))));
--echo # end of 10.2 test

8
sql/item.cc

@ -8853,9 +8853,11 @@ int Item_default_value::save_in_field(Field *field_arg, bool no_conversions)
table_map Item_default_value::used_tables() const
{
if (field && field->default_value && field->default_value->flags)
return field->default_value->expr->used_tables();
return static_cast<table_map>(0);
if (!field || !field->default_value)
return static_cast<table_map>(0);
if (!field->default_value->expr) // not fully parsed field
return static_cast<table_map>(RAND_TABLE_BIT);
return field->default_value->expr->used_tables();
}
/**

Loading…
Cancel
Save