From 5a759d31f766087d5e135e1d3d3d987693bc9b88 Mon Sep 17 00:00:00 2001 From: Monty Date: Sun, 23 Apr 2017 19:39:57 +0300 Subject: Changing field::field_name and Item::name to LEX_CSTRING Benefits of this patch: - Removed a lot of calls to strlen(), especially for field_string - Strings generated by parser are now const strings, less chance of accidently changing a string - Removed a lot of calls with LEX_STRING as parameter (changed to pointer) - More uniform code - Item::name_length was not kept up to date. Now fixed - Several bugs found and fixed (Access to null pointers, access of freed memory, wrong arguments to printf like functions) - Removed a lot of casts from (const char*) to (char*) Changes: - This caused some ABI changes - lex_string_set now uses LEX_CSTRING - Some fucntions are now taking const char* instead of char* - Create_field::change and after changed to LEX_CSTRING - handler::connect_string, comment and engine_name() changed to LEX_CSTRING - Checked printf() related calls to find bugs. Found and fixed several errors in old code. - A lot of changes from LEX_STRING to LEX_CSTRING, especially related to parsing and events. - Some changes from LEX_STRING and LEX_STRING & to LEX_CSTRING* - Some changes for char* to const char* - Added printf argument checking for my_snprintf() - Introduced null_clex_str, star_clex_string, temp_lex_str to simplify code - Added item_empty_name and item_used_name to be able to distingush between items that was given an empty name and items that was not given a name This is used in sql_yacc.yy to know when to give an item a name. - select table_name."*' is not anymore same as table_name.* - removed not used function Item::rename() - Added comparision of item->name_length before some calls to my_strcasecmp() to speed up comparison - Moved Item_sp_variable::make_field() from item.h to item.cc - Some minimal code changes to avoid copying to const char * - Fixed wrong error message in wsrep_mysql_parse() - Fixed wrong code in find_field_in_natural_join() where real_item() was set when it shouldn't - ER_ERROR_ON_RENAME was used with extra arguments. - Removed some (wrong) ER_OUTOFMEMORY, as alloc_root will already give the error. TODO: - Check possible unsafe casts in plugin/auth_examples/qa_auth_interface.c - Change code to not modify LEX_CSTRING for database name (as part of lower_case_table_names) --- include/mysql/plugin_encryption.h.pp | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) (limited to 'include/mysql/plugin_encryption.h.pp') diff --git a/include/mysql/plugin_encryption.h.pp b/include/mysql/plugin_encryption.h.pp index 4675f0cf6ec..4113e6d24a9 100644 --- a/include/mysql/plugin_encryption.h.pp +++ b/include/mysql/plugin_encryption.h.pp @@ -141,7 +141,8 @@ extern struct my_snprintf_service_st { size_t (*my_snprintf_type)(char*, size_t, const char*, ...); size_t (*my_vsnprintf_type)(char *, size_t, const char*, va_list); } *my_snprintf_service; -size_t my_snprintf(char* to, size_t n, const char* fmt, ...); +size_t my_snprintf(char* to, size_t n, const char* fmt, ...) + ; size_t my_vsnprintf(char *to, size_t n, const char* fmt, va_list ap); extern struct progress_report_service_st { void (*thd_progress_init_func)(void* thd, unsigned int max_stage); @@ -233,13 +234,20 @@ struct st_mysql_lex_string size_t length; }; typedef struct st_mysql_lex_string MYSQL_LEX_STRING; +struct st_mysql_const_lex_string +{ + const char *str; + size_t length; +}; +typedef struct st_mysql_const_lex_string MYSQL_CONST_LEX_STRING; extern struct thd_alloc_service_st { void *(*thd_alloc_func)(void*, unsigned int); void *(*thd_calloc_func)(void*, unsigned int); char *(*thd_strdup_func)(void*, const char *); char *(*thd_strmake_func)(void*, const char *, unsigned int); void *(*thd_memdup_func)(void*, const void*, unsigned int); - MYSQL_LEX_STRING *(*thd_make_lex_string_func)(void*, MYSQL_LEX_STRING *, + MYSQL_CONST_LEX_STRING *(*thd_make_lex_string_func)(void*, + MYSQL_CONST_LEX_STRING *, const char *, unsigned int, int); } *thd_alloc_service; void *thd_alloc(void* thd, unsigned int size); @@ -247,9 +255,10 @@ void *thd_calloc(void* thd, unsigned int size); char *thd_strdup(void* thd, const char *str); char *thd_strmake(void* thd, const char *str, unsigned int size); void *thd_memdup(void* thd, const void* str, unsigned int size); -MYSQL_LEX_STRING *thd_make_lex_string(void* thd, MYSQL_LEX_STRING *lex_str, - const char *str, unsigned int size, - int allocate_lex_string); +MYSQL_CONST_LEX_STRING +*thd_make_lex_string(void* thd, MYSQL_CONST_LEX_STRING *lex_str, + const char *str, unsigned int size, + int allocate_lex_string); extern struct thd_autoinc_service_st { void (*thd_get_autoinc_func)(const void* thd, unsigned long* off, unsigned long* inc); -- cgit v1.2.1