--- sql/item_strfunc.cc 2009-12-06 22:32:00.000000000 +0100 +++ sql/item_strfunc.cc 2009-12-06 22:35:21.000000000 +0100 @@ -42,6 +42,7 @@ String my_empty_string("",default_charset_info); +static char hexmap[]= { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f' }; bool Item_str_func::fix_fields(THD *thd, Item **ref) @@ -98,8 +99,11 @@ } + String *Item_func_md5::val_str(String *str) { + int i; + char *p; DBUG_ASSERT(fixed == 1); String * sptr= args[0]->val_str(str); str->set_charset(&my_charset_bin); @@ -114,12 +118,14 @@ null_value=1; return 0; } - sprintf((char *) str->ptr(), - "%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x", - digest[0], digest[1], digest[2], digest[3], - digest[4], digest[5], digest[6], digest[7], - digest[8], digest[9], digest[10], digest[11], - digest[12], digest[13], digest[14], digest[15]); + + p=(char *) str->ptr(); + for (i=0;i<=15;i++) + { + (*p++)=hexmap[digest[i] >> 4]; + (*p++)=hexmap[digest[i] & 15]; + } + str->length((uint) 32); return str; } @@ -144,6 +150,8 @@ String *Item_func_sha::val_str(String *str) { + int i; + char *p; DBUG_ASSERT(fixed == 1); String * sptr= args[0]->val_str(str); str->set_charset(&my_charset_bin); @@ -160,15 +168,12 @@ if (!( str->alloc(SHA1_HASH_SIZE*2) || (mysql_sha1_result(&context,digest)))) { - sprintf((char *) str->ptr(), - "%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x\ -%02x%02x%02x%02x%02x%02x%02x%02x", - digest[0], digest[1], digest[2], digest[3], - digest[4], digest[5], digest[6], digest[7], - digest[8], digest[9], digest[10], digest[11], - digest[12], digest[13], digest[14], digest[15], - digest[16], digest[17], digest[18], digest[19]); - + p=(char *) str->ptr(); + for (i=0;i<=19;i++) + { + (*p++)=hexmap[digest[i] >> 4]; + (*p++)=hexmap[digest[i] & 15]; + } str->length((uint) SHA1_HASH_SIZE*2); null_value=0; return str;