• bar@mysql.com/bar.intranet.mysql.r18.ru's avatar
    Bug#20404: SHOW CREATE TABLE fails with Turkish I · d18fcb3a
      
      Problem: SHOW CREATE TABLE printed garbage in table
      name for tables having TURKISH I
      (i.e. LATIN CAPITABLE LETTER I WITH DOT ABOVE)
      when lower-case-table-name=1.
      
      Reason: In some cases during lower/upper conversion in utf8,
      the result string can be shorter the original string
      (including the above letter). Old implementation of caseup_str()
      and casedn_str() didn't handle the result length properly,
      assuming that length cannot change.
      
      This fix changes the result type of cs->cset->casedn_str()
      and cs->cset->caseup_str() from VOID to UINT, to return
      the result length, as well as put '\0' terminator on a 
      proper place.
      
      Also, my_caseup_str_utf8() and my_casedn_str_utf8() were 
      rewritten not to use strlen() for performance purposes.
      It was done with help of adding of new functions - my_utf8_uni_no_range()
      and my_uni_utf8_no_range() - for null terminated strings.
    d18fcb3a
ctype-mb.c 27.8 KB