diff options
author | unknown <monty@mashka.mysql.fi> | 2003-03-15 04:41:57 +0200 |
---|---|---|
committer | unknown <monty@mashka.mysql.fi> | 2003-03-15 04:41:57 +0200 |
commit | 11117565a3682ea800d1b988775cd05ef78b4fb8 (patch) | |
tree | 872ca3e7569fe0db0147fd6f118af292b828ffc0 | |
parent | 13a5a24c6170921bb97796d96ca9f0ac20e5308e (diff) | |
parent | fcf035a0d85bc49c8c071246ce22a19f2fea395b (diff) | |
download | mariadb-git-11117565a3682ea800d1b988775cd05ef78b4fb8.tar.gz |
merge with 3.23 to get:
- Fix for empty table/column names
mysql-test/t/create.test:
Auto merged
sql/sql_parse.cc:
Auto merged
sql/ha_innodb.cc:
Auto merged
sql/table.cc:
Auto merged
tests/grant.pl:
Auto merged
sql/filesort.cc:
merge with 3.23
sql/sql_table.cc:
merge with 3.23
tests/grant.res:
merge with 3.23
-rw-r--r-- | mysql-test/t/create.test | 8 | ||||
-rw-r--r-- | sql/filesort.cc | 16 | ||||
-rw-r--r-- | sql/sql_parse.cc | 3 | ||||
-rw-r--r-- | sql/sql_table.cc | 11 | ||||
-rw-r--r-- | sql/table.cc | 7 | ||||
-rw-r--r-- | tests/grant.pl | 10 | ||||
-rw-r--r-- | tests/grant.res | 7 |
7 files changed, 42 insertions, 20 deletions
diff --git a/mysql-test/t/create.test b/mysql-test/t/create.test index bb0d6dc0d64..7d566cb89ac 100644 --- a/mysql-test/t/create.test +++ b/mysql-test/t/create.test @@ -55,6 +55,14 @@ create table test_$1.test2$ (a int); drop table test_$1.test2$; drop database test_$1; +--error 1103 +create table `` (a int); +--error 1103 +drop table if exists ``; +--error 1166 +create table t1 (`` int); +drop table if exists t1; + # # Test of CREATE ... SELECT with indexes # diff --git a/sql/filesort.cc b/sql/filesort.cc index b212e2cb366..86574e4dd57 100644 --- a/sql/filesort.cc +++ b/sql/filesort.cc @@ -68,7 +68,7 @@ ha_rows filesort(TABLE *table, SORT_FIELD *sortorder, uint s_length, ha_rows *examined_rows) { int error; - ulong memavl; + ulong memavl, min_sort_memory; uint maxbuffer; BUFFPEK *buffpek; ha_rows records; @@ -137,7 +137,8 @@ ha_rows filesort(TABLE *table, SORT_FIELD *sortorder, uint s_length, #endif memavl= thd->variables.sortbuff_size; - while (memavl >= MIN_SORT_MEMORY) + min_sort_memory= max(MIN_SORT_MEMORY, param.sort_length*MERGEBUFF2); + while (memavl >= min_sort_memory) { ulong old_memavl; ulong keys= memavl/(param.sort_length+sizeof(char*)); @@ -146,15 +147,10 @@ ha_rows filesort(TABLE *table, SORT_FIELD *sortorder, uint s_length, MYF(0)))) break; old_memavl=memavl; - if ((memavl=memavl/4*3) < MIN_SORT_MEMORY && old_memavl > MIN_SORT_MEMORY) - memavl=MIN_SORT_MEMORY; + if ((memavl=memavl/4*3) < min_sort_memory && old_memavl > min_sort_memory) + memavl= min_sort_memory; } - if (memavl < param.sort_length*MERGEBUFF2) - { - my_error(ER_OUT_OF_SORTMEMORY,MYF(0)); - goto err; - } - if (memavl < MIN_SORT_MEMORY) + if (memavl < min_sort_memory) { my_error(ER_OUTOFMEMORY,MYF(ME_ERROR+ME_WAITTANG), thd->variables.sortbuff_size); diff --git a/sql/sql_parse.cc b/sql/sql_parse.cc index 8fe5922baf0..dde4b6c5c93 100644 --- a/sql/sql_parse.cc +++ b/sql/sql_parse.cc @@ -3218,8 +3218,7 @@ TABLE_LIST *add_table_to_list(Table_ident *table, LEX_STRING *alias, if (!table) DBUG_RETURN(0); // End of memory alias_str= alias ? alias->str : table->table.str; - if (table->table.length > NAME_LEN || - check_table_name(table->table.str,table->table.length) || + if (check_table_name(table->table.str,table->table.length) || table->db.str && check_db_name(table->db.str)) { net_printf(&thd->net,ER_WRONG_TABLE_NAME,table->table.str); diff --git a/sql/sql_table.cc b/sql/sql_table.cc index adaedebfa28..0cdb0a7ff48 100644 --- a/sql/sql_table.cc +++ b/sql/sql_table.cc @@ -394,6 +394,11 @@ int mysql_create_table(THD *thd,const char *db, const char *table_name, } if (!(sql_field->flags & NOT_NULL_FLAG)) null_fields++; + if (check_column_name(sql_field->field_name)) + { + my_error(ER_WRONG_COLUMN_NAME, MYF(0), sql_field->field_name); + DBUG_RETURN(-1); + } while ((dup_field=it2++) != sql_field) { if (my_strcasecmp(sql_field->field_name, dup_field->field_name) == 0) @@ -830,12 +835,6 @@ TABLE *create_table_from_items(THD *thd, HA_CREATE_INFO *create_info, while ((item=it++)) { create_field *cr_field; - if (strlen(item->name) > NAME_LEN || - check_column_name(item->name)) - { - my_error(ER_WRONG_COLUMN_NAME,MYF(0),item->name); - DBUG_RETURN(0); - } Field *field; if (item->type() == Item::FUNC_ITEM) field=item->tmp_table_field(&tmp_table); diff --git a/sql/table.cc b/sql/table.cc index 1635c85eca8..d1e2c86e5ab 100644 --- a/sql/table.cc +++ b/sql/table.cc @@ -1164,6 +1164,8 @@ bool check_db_name(char *name) bool check_table_name(const char *name, uint length) { const char *end= name+length; + if (!length || length > NAME_LEN) + return 1; while (name != end) { @@ -1187,6 +1189,8 @@ bool check_table_name(const char *name, uint length) bool check_column_name(const char *name) { + const char *start= name; + while (*name) { #if defined(USE_MB) && defined(USE_MB_IDENT) @@ -1204,7 +1208,8 @@ bool check_column_name(const char *name) return 1; name++; } - return 0; + /* Error if empty or too long column name */ + return (name == start || (uint) (name - start) > NAME_LEN); } /* diff --git a/tests/grant.pl b/tests/grant.pl index ba95d78d068..5a24127d79d 100644 --- a/tests/grant.pl +++ b/tests/grant.pl @@ -210,6 +210,16 @@ user_query("delete from $opt_database.test where a=1",1); user_query("update $opt_database.test set b=3 where b=1",1); user_query("update $opt_database.test set b=b+1",1); +# +# Test global SELECT privilege combined with table level privileges +# + +safe_query("grant SELECT on *.* to $user"); +user_connect(0); +user_query("update $opt_database.test set b=b+1"); +safe_query("revoke SELECT on *.* from $user"); +user_connect(0); + # Add one privilege at a time until the user has all privileges user_query("select * from test",1); safe_query("grant select on $opt_database.test to $user"); diff --git a/tests/grant.res b/tests/grant.res index 822e9320f53..92d271cd864 100644 --- a/tests/grant.res +++ b/tests/grant.res @@ -195,7 +195,12 @@ update grant_test.test set b=3 where b=1 Error in execute: SELECT command denied to user: 'grant_user@localhost' for column 'b' in table 'test' update grant_test.test set b=b+1 Error in execute: SELECT command denied to user: 'grant_user@localhost' for column 'b' in table 'test' -select * from test +grant SELECT on *.* to grant_user@localhost +Connecting grant_user +update grant_test.test set b=b+1 +revoke SELECT on *.* from grant_user@localhost +Connecting grant_user +lect * from test Error in execute: select command denied to user: 'grant_user@localhost' for table 'test' grant select on grant_test.test to grant_user@localhost delete from grant_test.test where a=1 |