mirror of
https://github.com/MariaDB/server.git
synced 2025-01-29 02:05:57 +01:00
Fix for bug#15316 SET value having comma not correctly handled
disallow the use of comma in SET members mysql-test/r/create.result: Fix for bug#15316 SET value having comma not correctly handled test case mysql-test/t/create.test: Fix for bug#15316 SET value having comma not correctly handled test case
This commit is contained in:
parent
a8c9bbd4be
commit
4af4e1e704
3 changed files with 25 additions and 0 deletions
|
@ -699,3 +699,5 @@ t2 CREATE TABLE `t2` (
|
||||||
`a2` int(11) default NULL
|
`a2` int(11) default NULL
|
||||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||||
drop table t1, t2;
|
drop table t1, t2;
|
||||||
|
create table t1(a set("a,b","c,d") not null);
|
||||||
|
ERROR HY000: Illegal set 'a,b' value found during parsing
|
||||||
|
|
|
@ -603,4 +603,10 @@ show create table t2;
|
||||||
|
|
||||||
drop table t1, t2;
|
drop table t1, t2;
|
||||||
|
|
||||||
|
#
|
||||||
|
# Bug #15316 SET value having comma not correctly handled
|
||||||
|
#
|
||||||
|
--error 1105
|
||||||
|
create table t1(a set("a,b","c,d") not null);
|
||||||
|
|
||||||
# End of 4.1 tests
|
# End of 4.1 tests
|
||||||
|
|
|
@ -540,6 +540,11 @@ int mysql_prepare_table(THD *thd, HA_CREATE_INFO *create_info,
|
||||||
sql_field->interval_list);
|
sql_field->interval_list);
|
||||||
List_iterator<String> it(sql_field->interval_list);
|
List_iterator<String> it(sql_field->interval_list);
|
||||||
String conv, *tmp;
|
String conv, *tmp;
|
||||||
|
char comma_buf[2];
|
||||||
|
int comma_length= cs->cset->wc_mb(cs, ',', (uchar*) comma_buf,
|
||||||
|
(uchar*) comma_buf +
|
||||||
|
sizeof(comma_buf));
|
||||||
|
DBUG_ASSERT(comma_length > 0);
|
||||||
for (uint i= 0; (tmp= it++); i++)
|
for (uint i= 0; (tmp= it++); i++)
|
||||||
{
|
{
|
||||||
if (String::needs_conversion(tmp->length(), tmp->charset(),
|
if (String::needs_conversion(tmp->length(), tmp->charset(),
|
||||||
|
@ -559,6 +564,18 @@ int mysql_prepare_table(THD *thd, HA_CREATE_INFO *create_info,
|
||||||
interval->type_lengths[i]);
|
interval->type_lengths[i]);
|
||||||
interval->type_lengths[i]= lengthsp;
|
interval->type_lengths[i]= lengthsp;
|
||||||
((uchar *)interval->type_names[i])[lengthsp]= '\0';
|
((uchar *)interval->type_names[i])[lengthsp]= '\0';
|
||||||
|
if (sql_field->sql_type == FIELD_TYPE_SET)
|
||||||
|
{
|
||||||
|
if (cs->coll->instr(cs, interval->type_names[i],
|
||||||
|
interval->type_lengths[i],
|
||||||
|
comma_buf, comma_length, NULL, 0))
|
||||||
|
{
|
||||||
|
my_printf_error(ER_UNKNOWN_ERROR,
|
||||||
|
"Illegal %s '%-.64s' value found during parsing",
|
||||||
|
MYF(0), "set", tmp->ptr());
|
||||||
|
DBUG_RETURN(-1);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
sql_field->interval_list.empty(); // Don't need interval_list anymore
|
sql_field->interval_list.empty(); // Don't need interval_list anymore
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue