Commit e550d6e7 authored by unknown's avatar unknown
Browse files

Review fix for BUG#17015: Routine name truncation not an error


sql/field.h:
  Added new method to Field class: char_length()
sql/sp.cc:
  Use Field::char_length() to check number of characters in the name field.
parent 8dd6e145
Loading
Loading
Loading
Loading
+6 −0
Original line number Diff line number Diff line
@@ -319,6 +319,12 @@ class Field
  /* convert decimal to longlong with overflow check */
  longlong convert_decimal2longlong(const my_decimal *val, bool unsigned_flag,
                                    int *err);
  /* The max. number of characters */
  inline uint32 Field::char_length() const
  {
    return field_length / charset()->mbmaxlen;
  }

  friend bool reopen_table(THD *,struct st_table *,bool);
  friend int cre_myisam(my_string name, register TABLE *form, uint options,
			ulonglong auto_increment_value);
+4 −5
Original line number Diff line number Diff line
@@ -509,11 +509,10 @@ db_create_routine(THD *thd, int type, sp_head *sp)
      goto done;
    }

    if ((system_charset_info->cset->numchars(system_charset_info,
    if (system_charset_info->cset->numchars(system_charset_info,
                                            sp->m_name.str,
                                             sp->m_name.str+sp->m_name.length) *
         table->field[MYSQL_PROC_FIELD_NAME]->charset()->mbmaxlen) >
        table->field[MYSQL_PROC_FIELD_NAME]->field_length)
                                            sp->m_name.str+sp->m_name.length) >
        table->field[MYSQL_PROC_FIELD_NAME]->char_length())
    {
      ret= SP_BAD_IDENTIFIER;
      goto done;