summaryrefslogtreecommitdiff
path: root/sql/sql_table.cc
diff options
context:
space:
mode:
authorunknown <gluh@eagle.intranet.mysql.r18.ru>2006-03-29 19:52:26 +0500
committerunknown <gluh@eagle.intranet.mysql.r18.ru>2006-03-29 19:52:26 +0500
commit2aeb42065eb732ce26ab3ceeb74f5497bf506247 (patch)
tree7fad6f415c7231b1eeb99553dcf4cbaa4218a58e /sql/sql_table.cc
parent2036db2a40fd6cb9c0266c442fed866011fee690 (diff)
downloadmariadb-git-2aeb42065eb732ce26ab3ceeb74f5497bf506247.tar.gz
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
Diffstat (limited to 'sql/sql_table.cc')
-rw-r--r--sql/sql_table.cc17
1 files changed, 17 insertions, 0 deletions
diff --git a/sql/sql_table.cc b/sql/sql_table.cc
index 616db8b0424..21f597caf94 100644
--- a/sql/sql_table.cc
+++ b/sql/sql_table.cc
@@ -540,6 +540,11 @@ int mysql_prepare_table(THD *thd, HA_CREATE_INFO *create_info,
sql_field->interval_list);
List_iterator<String> it(sql_field->interval_list);
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++)
{
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]= lengthsp;
((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
}