Commit f443992e authored by unknown's avatar unknown

Fix for bug#6317: string function CHAR, parameter is NULL, wrong result

parent 2e199a1e
...@@ -733,3 +733,9 @@ WHERE a = CONV('e251273eb74a8ee3', 16, 10); ...@@ -733,3 +733,9 @@ WHERE a = CONV('e251273eb74a8ee3', 16, 10);
id select_type table type possible_keys key key_len ref rows Extra id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE t1 system NULL NULL NULL NULL 1 1 SIMPLE t1 system NULL NULL NULL NULL 1
DROP TABLE t1; DROP TABLE t1;
SELECT CHAR(NULL,121,83,81,'76') as my_column;
my_column
ySQL
SELECT CHAR_LENGTH(CHAR(NULL,121,83,81,'76')) as my_column;
my_column
4
...@@ -476,3 +476,9 @@ EXPLAIN ...@@ -476,3 +476,9 @@ EXPLAIN
WHERE a = CONV('e251273eb74a8ee3', 16, 10); WHERE a = CONV('e251273eb74a8ee3', 16, 10);
DROP TABLE t1; DROP TABLE t1;
#
# Bug #6317: string function CHAR, parameter is NULL, wrong result
#
SELECT CHAR(NULL,121,83,81,'76') as my_column;
SELECT CHAR_LENGTH(CHAR(NULL,121,83,81,'76')) as my_column;
...@@ -1868,6 +1868,7 @@ String *Item_func_char::val_str(String *str) ...@@ -1868,6 +1868,7 @@ String *Item_func_char::val_str(String *str)
{ {
int32 num=(int32) args[i]->val_int(); int32 num=(int32) args[i]->val_int();
if (!args[i]->null_value) if (!args[i]->null_value)
{
#ifdef USE_MB #ifdef USE_MB
if (use_mb(collation.collation)) if (use_mb(collation.collation))
{ {
...@@ -1883,6 +1884,7 @@ b1: str->append((char)(num>>8)); ...@@ -1883,6 +1884,7 @@ b1: str->append((char)(num>>8));
} }
#endif #endif
str->append((char)num); str->append((char)num);
}
} }
str->set_charset(collation.collation); str->set_charset(collation.collation);
str->realloc(str->length()); // Add end 0 (for Purify) str->realloc(str->length()); // Add end 0 (for Purify)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment