mirror of
https://github.com/MariaDB/server.git
synced 2025-09-11 05:52:26 +03:00
Bug#45168: assertion with convert() and empty set value
The assertion in String::copy was added in order to avoid valgrind errors when the destination was the same as the source. Eased restriction to allow for the case when str == NULL.
This commit is contained in:
@@ -2710,13 +2710,12 @@ String *Item_func_conv_charset::val_str(String *str)
|
||||
return null_value ? 0 : &str_value;
|
||||
/*
|
||||
Here we don't pass 'str' as a parameter to args[0]->val_str()
|
||||
as 'str' may points to 'str_value' (e.g. see Item::save_in_field()),
|
||||
as 'str' may point to 'str_value' (e.g. see Item::save_in_field()),
|
||||
which we use below to convert string.
|
||||
Use argument's 'str_value' instead.
|
||||
*/
|
||||
String *arg= args[0]->val_str(&args[0]->str_value);;
|
||||
String *arg= args[0]->val_str(&args[0]->str_value);
|
||||
uint dummy_errors;
|
||||
arg= args[0]->val_str(&args[0]->str_value);
|
||||
if (!arg)
|
||||
{
|
||||
null_value=1;
|
||||
|
@@ -322,14 +322,23 @@ bool String::set_or_copy_aligned(const char *str,uint32 arg_length,
|
||||
return copy_aligned(str, arg_length, offset, cs);
|
||||
}
|
||||
|
||||
/* Copy with charset conversion */
|
||||
|
||||
/**
|
||||
Copies the character data into this String, with optional character set
|
||||
conversion.
|
||||
|
||||
@return
|
||||
FALSE ok
|
||||
TRUE Could not allocate result buffer
|
||||
|
||||
*/
|
||||
|
||||
bool String::copy(const char *str, uint32 arg_length,
|
||||
CHARSET_INFO *from_cs, CHARSET_INFO *to_cs, uint *errors)
|
||||
{
|
||||
uint32 offset;
|
||||
|
||||
DBUG_ASSERT(str != Ptr);
|
||||
|
||||
DBUG_ASSERT(!str || str != Ptr);
|
||||
|
||||
if (!needs_conversion(arg_length, from_cs, to_cs, &offset))
|
||||
{
|
||||
|
Reference in New Issue
Block a user