diff options
author | gluh@gluh.mysql.r18.ru <> | 2005-03-07 18:56:18 +0300 |
---|---|---|
committer | gluh@gluh.mysql.r18.ru <> | 2005-03-07 18:56:18 +0300 |
commit | 00449b8f9c6fdb87caf7c5e683e605db4a3fee78 (patch) | |
tree | 33b2cea5675979a768443e2ca514b4434701e3d6 /sql/item_strfunc.cc | |
parent | 4e136e8d1ae3dda32b24c8b7ec0fd35f0cbef9f7 (diff) | |
download | mariadb-git-00449b8f9c6fdb87caf7c5e683e605db4a3fee78.tar.gz |
Fix for bug#8978 : Crash on 'select format ...'
Diffstat (limited to 'sql/item_strfunc.cc')
-rw-r--r-- | sql/item_strfunc.cc | 13 |
1 files changed, 7 insertions, 6 deletions
diff --git a/sql/item_strfunc.cc b/sql/item_strfunc.cc index aeb63d6af00..ec88f58aa93 100644 --- a/sql/item_strfunc.cc +++ b/sql/item_strfunc.cc @@ -1465,7 +1465,8 @@ Item_func_format::Item_func_format(Item *org,int dec) :Item_str_func(org) String *Item_func_format::val_str(String *str) { double nr =args[0]->val(); - uint32 diff,length,str_length; + uint32 length,str_length; + int diff; uint dec; if ((null_value=args[0]->null_value)) return 0; /* purecov: inspected */ @@ -1483,17 +1484,17 @@ String *Item_func_format::val_str(String *str) if (str_length >= dec+4) { char *tmp,*pos; - length= str->length()+(diff=(str_length- dec-1)/3); + length= str->length()+(diff= (int)(str_length- dec-1)/3); str= copy_if_not_alloced(&tmp_str,str,length); str->length(length); tmp= (char*) str->ptr()+length - dec-1; for (pos= (char*) str->ptr()+length-1; pos != tmp; pos--) - pos[0]= pos[-(int) diff]; + pos[0]= pos[-diff]; while (diff) { - pos[0]=pos[-(int) diff]; pos--; - pos[0]=pos[-(int) diff]; pos--; - pos[0]=pos[-(int) diff]; pos--; + pos[0]=pos[-diff]; pos--; + pos[0]=pos[-diff]; pos--; + pos[0]=pos[-diff]; pos--; pos[0]=','; pos--; diff--; |