diff options
Diffstat (limited to 'sql/table.cc')
-rw-r--r-- | sql/table.cc | 28 |
1 files changed, 24 insertions, 4 deletions
diff --git a/sql/table.cc b/sql/table.cc index bc9d046f617..d7944e6dd80 100644 --- a/sql/table.cc +++ b/sql/table.cc @@ -1140,7 +1140,8 @@ char *get_field(MEM_ROOT *mem, TABLE *table, uint fieldnr) bool check_db_name(char *name) { - char *start=name; + char *start=name; + bool last_char_is_space= FALSE; if (lower_case_table_names) casedn_str(name); @@ -1148,6 +1149,7 @@ bool check_db_name(char *name) while (*name) { #if defined(USE_MB) && defined(USE_MB_IDENT) + last_char_is_space= my_isspace(default_charset_info, *name); if (use_mb(default_charset_info)) { int len=my_ismbchar(default_charset_info, name, name+MBMAXLEN); @@ -1157,19 +1159,22 @@ bool check_db_name(char *name) continue; } } +#else + last_char_is_space= *name==' '; #endif if (*name == '/' || *name == '\\' || *name == FN_LIBCHAR || *name == FN_EXTCHAR) return 1; name++; } - return (uint) (name - start) > NAME_LEN; + return last_char_is_space || (uint) (name - start) > NAME_LEN; } /* Allow anything as a table name, as long as it doesn't contain an a '/', or a '.' character + or ' ' at the end returns 1 on error */ @@ -1179,10 +1184,17 @@ bool check_table_name(const char *name, uint length) const char *end= name+length; if (!length || length > NAME_LEN) return 1; +#if defined(USE_MB) && defined(USE_MB_IDENT) + bool last_char_is_space= FALSE; +#else + if (name[length-1]==' ') + return 1; +#endif while (name != end) { #if defined(USE_MB) && defined(USE_MB_IDENT) + last_char_is_space= my_isspace(default_charset_info, *name); if (use_mb(default_charset_info)) { int len=my_ismbchar(default_charset_info, name, end); @@ -1197,16 +1209,22 @@ bool check_table_name(const char *name, uint length) return 1; name++; } +#if defined(USE_MB) && defined(USE_MB_IDENT) + return last_char_is_space; +#else return 0; +#endif } bool check_column_name(const char *name) { const char *start= name; - + bool last_char_is_space= false; + while (*name) { #if defined(USE_MB) && defined(USE_MB_IDENT) + last_char_is_space= my_isspace(default_charset_info, *name); if (use_mb(default_charset_info)) { int len=my_ismbchar(default_charset_info, name, name+MBMAXLEN); @@ -1216,13 +1234,15 @@ bool check_column_name(const char *name) continue; } } +#else + last_char_is_space= *name==' '; #endif if (*name == NAMES_SEP_CHAR) return 1; name++; } /* Error if empty or too long column name */ - return (name == start || (uint) (name - start) > NAME_LEN); + return last_char_is_space || (name == start || (uint) (name - start) > NAME_LEN); } /* |