diff options
Diffstat (limited to 'sql/sql_udf.cc')
-rw-r--r-- | sql/sql_udf.cc | 16 |
1 files changed, 10 insertions, 6 deletions
diff --git a/sql/sql_udf.cc b/sql/sql_udf.cc index 02f068e9..db7f6483 100644 --- a/sql/sql_udf.cc +++ b/sql/sql_udf.cc @@ -181,6 +181,8 @@ void udf_init() initialized = 1; new_thd->thread_stack= (char*) &new_thd; new_thd->store_globals(); + new_thd->set_query_inner((char*) STRING_WITH_LEN("intern:udf_init"), + default_charset_info); new_thd->set_db(&MYSQL_SCHEMA_NAME); tables.init_one_table(&new_thd->db, &MYSQL_FUNC_NAME, 0, TL_READ); @@ -206,10 +208,11 @@ void udf_init() while (!(error= read_record_info.read_record())) { DBUG_PRINT("info",("init udf record")); - LEX_CSTRING name; - name.str=get_field(&mem, table->field[0]); - name.length = (uint) safe_strlen(name.str); - char *dl_name= get_field(&mem, table->field[2]); + DBUG_ASSERT(!(new_thd->variables.sql_mode & MODE_PAD_CHAR_TO_FULL_LENGTH)); + DBUG_ASSERT(table->field[0]->get_thd() == new_thd); + DBUG_ASSERT(table->field[2]->get_thd() == new_thd); + LEX_CSTRING name= table->field[0]->val_lex_string_strmake(&mem); + LEX_CSTRING dl_name= table->field[2]->val_lex_string_strmake(&mem); bool new_dl=0; Item_udftype udftype=UDFTYPE_FUNCTION; if (table->s->fields >= 4) // New func table @@ -222,7 +225,8 @@ void udf_init() On windows we must check both FN_LIBCHAR and '/'. */ - if (!name.str || !dl_name || check_valid_path(dl_name, strlen(dl_name)) || + if (!name.length || !dl_name.length || + check_valid_path(dl_name.str, dl_name.length) || check_string_char_length(&name, 0, NAME_CHAR_LEN, system_charset_info, 1)) { @@ -232,7 +236,7 @@ void udf_init() } if (!(tmp= add_udf(&name,(Item_result) table->field[1]->val_int(), - dl_name, udftype))) + dl_name.str, udftype))) { sql_print_error("Can't alloc memory for udf function: '%.64s'", name.str); continue; |