Bug #26537: item_unhex() was not expected

to return NULL for non-NULL arguments.
This is not the case as it can return NULL
for invalid hexidecimal strings.
Fixed by setting the maybe_null flag.
parent b3cb8466
...@@ -1940,4 +1940,10 @@ abcxx ...@@ -1940,4 +1940,10 @@ abcxx
select lpad('abc', cast(5 as unsigned integer), 'x'); select lpad('abc', cast(5 as unsigned integer), 'x');
lpad('abc', cast(5 as unsigned integer), 'x') lpad('abc', cast(5 as unsigned integer), 'x')
xxabc xxabc
SELECT UNHEX('G');
UNHEX('G')
NULL
SELECT UNHEX('G') IS NULL;
UNHEX('G') IS NULL
1
End of 5.0 tests End of 5.0 tests
...@@ -1008,4 +1008,10 @@ select repeat('a', cast(2 as unsigned int)); ...@@ -1008,4 +1008,10 @@ select repeat('a', cast(2 as unsigned int));
select rpad('abc', cast(5 as unsigned integer), 'x'); select rpad('abc', cast(5 as unsigned integer), 'x');
select lpad('abc', cast(5 as unsigned integer), 'x'); select lpad('abc', cast(5 as unsigned integer), 'x');
#
# Bug #26537: UNHEX() IS NULL comparison fails
#
SELECT UNHEX('G');
SELECT UNHEX('G') IS NULL;
--echo End of 5.0 tests --echo End of 5.0 tests
...@@ -605,7 +605,11 @@ class Item_func_unhex :public Item_str_func ...@@ -605,7 +605,11 @@ class Item_func_unhex :public Item_str_func
{ {
String tmp_value; String tmp_value;
public: public:
Item_func_unhex(Item *a) :Item_str_func(a) {} Item_func_unhex(Item *a) :Item_str_func(a)
{
/* there can be bad hex strings */
maybe_null= 1;
}
const char *func_name() const { return "unhex"; } const char *func_name() const { return "unhex"; }
String *val_str(String *); String *val_str(String *);
void fix_length_and_dec() void fix_length_and_dec()
......
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