mirror of
https://github.com/MariaDB/server.git
synced 2025-01-29 10:14:19 +01:00
Fix for Bug#56138 "valgrind errors about overlapping memory when double-assigning same variable",
and related small fixes.
This commit is contained in:
parent
871930e708
commit
b5586c67ec
5 changed files with 19 additions and 8 deletions
|
@ -447,4 +447,7 @@ IF(
|
|||
count(*), 1)
|
||||
1
|
||||
DROP TABLE t1;
|
||||
select @v:=@v:=sum(1) from dual;
|
||||
@v:=@v:=sum(1)
|
||||
1
|
||||
End of 5.1 tests
|
||||
|
|
|
@ -346,4 +346,11 @@ FROM t1 GROUP BY a LIMIT 1;
|
|||
|
||||
DROP TABLE t1;
|
||||
|
||||
#
|
||||
# BUG#56138 "valgrind errors about overlapping memory when
|
||||
# double-assigning same variable"
|
||||
#
|
||||
|
||||
select @v:=@v:=sum(1) from dual;
|
||||
|
||||
--echo End of 5.1 tests
|
||||
|
|
|
@ -786,11 +786,8 @@ int field_conv(Field *to,Field *from)
|
|||
((Field_varstring*)from)->length_bytes ==
|
||||
((Field_varstring*)to)->length_bytes))
|
||||
{ // Identical fields
|
||||
#ifdef HAVE_purify
|
||||
/* This may happen if one does 'UPDATE ... SET x=x' */
|
||||
if (to->ptr != from->ptr)
|
||||
#endif
|
||||
memcpy(to->ptr,from->ptr,to->pack_length());
|
||||
// to->ptr==from->ptr may happen if one does 'UPDATE ... SET x=x'
|
||||
memmove(to->ptr, from->ptr, to->pack_length());
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -3920,7 +3920,7 @@ update_hash(user_var_entry *entry, bool set_null, void *ptr, uint length,
|
|||
length--; // Fix length change above
|
||||
entry->value[length]= 0; // Store end \0
|
||||
}
|
||||
memcpy(entry->value,ptr,length);
|
||||
memmove(entry->value, ptr, length);
|
||||
if (type == DECIMAL_RESULT)
|
||||
((my_decimal*)entry->value)->fix_buffer_pointer();
|
||||
entry->length= length;
|
||||
|
|
|
@ -4034,8 +4034,12 @@ update_ref_and_keys(THD *thd, DYNAMIC_ARRAY *keyuse,JOIN_TAB *join_tab,
|
|||
continue;
|
||||
}
|
||||
|
||||
#ifdef HAVE_purify
|
||||
/* Valgrind complains about overlapped memcpy when save_pos==use. */
|
||||
#if defined(__GNUC__) && !MY_GNUC_PREREQ(4,4)
|
||||
/*
|
||||
Old gcc used a memcpy(), which is undefined if save_pos==use:
|
||||
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=19410
|
||||
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=39480
|
||||
*/
|
||||
if (save_pos != use)
|
||||
#endif
|
||||
*save_pos= *use;
|
||||
|
|
Loading…
Add table
Reference in a new issue