• Alexander Barkov's avatar
    MDEV-10425 Assertion `collation.derivation == DERIVATION_IMPLICIT' failed in... · 7e4eb990
    Alexander Barkov authored
    MDEV-10425 Assertion `collation.derivation == DERIVATION_IMPLICIT' failed in Item_func_conv_charset::fix_length_and_dec()
    MDEV-10850 Wrong result for WHERE .. (f2=TO_BASE64('test') OR f2=TO_BASE64('TEST'))
    
    Problem N1: MDEV-10425
    Item_func_{md5|sha|sha2}::fix_length_and_dec() changed args[0]->collation
    to force binary comparison in args[0]->eq().
    It was done to treat e.g. MD5('a') and MD5('A') as different values.
    It is wrong for a Item_func_xxx to modify its arguments.
    Item_func_conv_charset did not expect that and crashed on assert.
    
    Problem N2: MDEV-10850
    Item_func_to_base64, Item_func_password, Item_func_hex are also case sensitive
    hash functions, but they did not compare their arguments as binary.
    
    Solution:
    - Removing the code changing args[0]->collation
    - Introducing Item_str_ascii_checksum_func as a common parent
      for Item_func_{md5|sha|sha2|password|hex|to_base64}
      and overriding its eq() method to compare arguments binary.
    7e4eb990
item_strfunc.cc 137 KB