diff options
author | Monty <monty@mariadb.org> | 2019-08-14 23:46:47 +0300 |
---|---|---|
committer | Monty <monty@mariadb.org> | 2020-07-02 14:25:41 +0300 |
commit | 29f9e679adc90adf5d3c6e08da947789c9c2ac8b (patch) | |
tree | f15a3530548b3b0c7c9efd34386302fd63ec6c73 /sql/field.cc | |
parent | 3f2044ae99633ce6d9c756bb6b045efc0707b4b5 (diff) | |
download | mariadb-git-29f9e679adc90adf5d3c6e08da947789c9c2ac8b.tar.gz |
Don't copy uninitialized bytes when copying varstrings
When using field_conv(), which is called in case of field1=field2 copy in
fill_records(), full varstring's was copied, including unitialized bytes.
This caused valgrind to compilain about usage of unitialized bytes when
using Aria static length records.
Fixed by not using memcpy when copying varstrings but instead just copy
the real bytes.
Diffstat (limited to 'sql/field.cc')
-rw-r--r-- | sql/field.cc | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/sql/field.cc b/sql/field.cc index 155d8a4eb0d..1e2a711c956 100644 --- a/sql/field.cc +++ b/sql/field.cc @@ -7613,6 +7613,17 @@ int Field_varstring::save_field_metadata(uchar *metadata_ptr) return 2; } + +bool Field_varstring::memcpy_field_possible(const Field *from) const +{ + return (Field_str::memcpy_field_possible(from) && + !compression_method() == !from->compression_method() && + length_bytes == ((Field_varstring*) from)->length_bytes && + (table->file && !(table->file->ha_table_flags() & + HA_RECORD_MUST_BE_CLEAN_ON_WRITE))); +} + + int Field_varstring::store(const char *from,size_t length,CHARSET_INFO *cs) { ASSERT_COLUMN_MARKED_FOR_WRITE_OR_COMPUTED; |