**Describe what's wrong**

ClickHouse server crashes when inserting data into compressed Decimal, String, FixedString and Array columns.

**Does it reproduce on recent release?**

Happens on v21.11.5.33 03d80c491f4a1afe4032903859dba4bfbc758e30. 

**How to reproduce**

Unfortunately i was unable to reproduce this using official docker image. However it happens all the time on my custom build (lightweight, with all the stuff i don't use disabled) when inserting data into Decimal, String, FixedString and Array columns.

**Error message and/or stacktrace**

```
#0  DB::Memory<Allocator<false, false> >::size (this=0x0) at ../src/IO/BufferWithOwnMemory.h:70
#1  DB::ColumnVector<unsigned long>::compress (this=0x7faa0f122be0) at ../src/Columns/ColumnVector.cpp:495
#2  0x000000000bab8a14 in DB::ColumnNullable::compress() const () at ../contrib/boost/boost/smart_ptr/intrusive_ptr.hpp:179
#3  0x000000000bc43645 in DB::MemorySink::consume (this=0x7faa969873d8, chunk=...) at ../contrib/libcxx/include/new:285
#4  0x000000000c2e7a38 in DB::SinkToStorage::transform(DB::Chunk&) () at ../src/Processors/Sinks/SinkToStorage.cpp:19
#5  0x000000000c27a04d in std::__1::__function::__policy_func<void ()>::operator()() const (this=0x7fa9eabeed20) at ../contrib/libcxx/include/functional:2558
#6  std::__1::function<void ()>::operator()() const (this=0x7fa9eabeed20) at ../contrib/libcxx/include/functional:2560
#7  DB::runStep(std::__1::function<void ()>, DB::ThreadStatus*, std::__1::atomic<unsigned long>*) () at ../src/Processors/Transforms/ExceptionKeepingTransform.cpp:102
#8  0x000000000c27a257 in DB::ExceptionKeepingTransform::work() () at ../contrib/libcxx/include/type_traits:2549
#9  0x000000000c1a8cc9 in DB::executeJob (processor=0x7faa969873d8) at ../src/Processors/Executors/PipelineExecutor.cpp:88
```
{
    MutableColumnPtr new_col_holder = ColumnFixedString::create(n);
    if (size > 0)
    {
        auto & new_col = assert_cast<ColumnFixedString &>(*new_col_holder);
        new_col.chars.resize(size * n);
        size_t count = std::min(this->size(), size);
        memcpy(new_col.chars.data(), chars.data(), count * n * sizeof(chars[0]));
        if (size > count)
            memset(&(new_col.chars[count * n]), '\0', (size - count) * n);
    }
    return new_col_holder;
}
bool ColumnFixedString::isDefaultAt(size_t index) const
{
    assert(index < size());
    return memoryIsZero(chars.data() + index * n, n);
}
void ColumnFixedString::insert(const Field & x)
{
    const String & s = DB::get<const String &>(x);
    if (s.size() > n)
        throw Exception("Too large string '" + s + "' for FixedString column", ErrorCodes::TOO_LARGE_STRING_SIZE);
    size_t old_size = chars.size();
    chars.resize_fill(old_size + n);
    memcpy(chars.data() + old_size, s.data(), s.size());
}
void ColumnFixedString::insertFrom(const IColumn & src_, size_t index)