1
0
mirror of https://github.com/MariaDB/server.git synced 2025-07-30 16:24:05 +03:00

MDEV-11444 Server crashes in String::ptr / Item_func_json_depth::val_int.

CAST AS JSON didn't set the null_value mark properly.
This commit is contained in:
Alexey Botchkov
2016-12-03 11:32:47 +04:00
parent 4ad0813a55
commit eca1579051
4 changed files with 13 additions and 5 deletions

View File

@ -223,3 +223,6 @@ json_object("a", '{"b": "abcd"}')
select json_object("a", cast('{"b": "abcd"}' as json));
json_object("a", cast('{"b": "abcd"}' as json))
{"a": {"b": "abcd"}}
select json_depth(cast(NULL as JSON));
json_depth(cast(NULL as JSON))
NULL

View File

@ -98,3 +98,5 @@ select json_object("a", json_object("b", "abcd"));
select json_object("a", '{"b": "abcd"}');
select json_object("a", cast('{"b": "abcd"}' as json));
select json_depth(cast(NULL as JSON));

View File

@ -2073,3 +2073,10 @@ void Item_json_typecast::fix_length_and_dec()
}
String *Item_json_typecast::val_str(String *str)
{
String *vs= args[0]->val_str(str);
null_value= args[0]->null_value;
return vs;
}

View File

@ -420,11 +420,7 @@ public:
const char *func_name() const { return "cast_as_json"; }
bool is_json_type() { return true; }
void fix_length_and_dec();
String *val_str(String *str)
{
return args[0]->val_str(str);
}
String *val_str(String *str);
Item *get_copy(THD *thd, MEM_ROOT *mem_root)
{ return get_item_copy<Item_json_typecast>(thd, mem_root, this); }
};