UBsan test_catboost_model_reload test
```
../src/Interpreters/ExternalLoader.cpp:1142:33: runtime error: member call on address 0x7f159c20cc00 which does not point to an object of type 'DB::IExternalLoadable'
0x7f159c20cc00: note: object is of type 'DB::CatBoostModel'
 00 00 00 00  e0 64 fc 07 00 00 00 00  00 cc 20 9c 15 7f 00 00  d0 86 11 9c 15 7f 00 00  6d 6f 64 65
              ^~~~~~~~~~~~~~~~~~~~~~~
              vptr for 'DB::CatBoostModel'
    #0 0x1b08e5ce in DB::ExternalLoader::LoadingDispatcher::calculateNextUpdateTime(std::__1::shared_ptr<DB::IExternalLoadable const> const&, unsigned long) const obj-x86_64-linux-gnu/../src/Interpreters/ExternalLoader.cpp:1142:33
    #1 0x1b082550 in DB::ExternalLoader::LoadingDispatcher::saveResultOfLoadingSingleObject(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, unsigned long, std::__1::shared_ptr<DB::IExternalLoadable const>, std::__1::shared_ptr<DB::IExternalLoadable const>, std::exception_ptr, unsigned long, DB::(anonymous namespace)::LoadingGuardForAsyncLoad const&) obj-x86_64-linux-gnu/../src/Interpreters/ExternalLoader.cpp:1058:32
    #2 0x1b08ab87 in DB::ExternalLoader::LoadingDispatcher::doLoading(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, unsigned long, bool, unsigned long, bool, std::__1::shared_ptr<DB::ThreadGroupStatus>) obj-x86_64-linux-gnu/../src/Interpreters/ExternalLoader.cpp:988:17
    #3 0x1b089d8c in DB::ExternalLoader::LoadingDispatcher::startLoading(DB::ExternalLoader::LoadingDispatcher::Info&, bool, unsigned long) obj-x86_64-linux-gnu/../src/Interpreters/ExternalLoader.cpp:919:13
    #4 0x1b0a226e in DB::ExternalLoader::LoadingDispatcher::loadImpl(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::chrono::duration<long long, std::__1::ratio<1l, 1000l> >, bool, std::__1::unique_lock<std::__1::mutex>&)::'lambda'()::operator()() const obj-x86_64-linux-gnu/../src/Interpreters/ExternalLoader.cpp:822:17
    #5 0x1b0a200e in void std::__1::condition_variable::wait<DB::ExternalLoader::LoadingDispatcher::loadImpl(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::chrono::duration<long long, std::__1::ratio<1l, 1000l> >, bool, std::__1::unique_lock<std::__1::mutex>&)::'lambda'()>(std::__1::unique_lock<std::__1::mutex>&, DB::ExternalLoader::LoadingDispatcher::loadImpl(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::chrono::duration<long long, std::__1::ratio<1l, 1000l> >, bool, std::__1::unique_lock<std::__1::mutex>&)::'lambda'()) obj-x86_64-linux-gnu/../contrib/libcxx/include/__mutex_base:405:13
    #6 0x1b0a200e in DB::ExternalLoader::LoadingDispatcher::loadImpl(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::chrono::duration<long long, std::__1::ratio<1l, 1000l> >, bool, std::__1::unique_lock<std::__1::mutex>&) obj-x86_64-linux-gnu/../src/Interpreters/ExternalLoader.cpp:829:19
    #7 0x1b087462 in DB::ExternalLoader::LoadResult DB::ExternalLoader::LoadingDispatcher::tryLoadOrReload<DB::ExternalLoader::LoadResult>(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::chrono::duration<long long, std::__1::ratio<1l, 1000l> >) obj-x86_64-linux-gnu/../src/Interpreters/ExternalLoader.cpp:614:23
    #8 0x1b085afb in std::__1::shared_ptr<DB::IExternalLoadable const> DB::ExternalLoader::loadOrReload<std::__1::shared_ptr<DB::IExternalLoadable const>, void>(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) const obj-x86_64-linux-gnu/../src/Interpreters/ExternalLoader.cpp:1392:39
    #9 0x1b79cd27 in DB::ExternalModelsLoader::reloadModel(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) const obj-x86_64-linux-gnu/../src/Interpreters/ExternalModelsLoader.h:30:9
    #10 0x1b785497 in DB::InterpreterSystemQuery::execute() obj-x86_64-linux-gnu/../src/Interpreters/InterpreterSystemQuery.cpp:319:36
    #11 0x1ba0f310 in DB::executeQueryImpl(char const*, char const*, std::__1::shared_ptr<DB::Context>, bool, DB::QueryProcessingStage::Enum, DB::ReadBuffer*) obj-x86_64-linux-gnu/../src/Interpreters/executeQuery.cpp:635:32
    #12 0x1ba0c929 in DB::executeQuery(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::shared_ptr<DB::Context>, bool, DB::QueryProcessingStage::Enum) obj-x86_64-linux-gnu/../src/Interpreters/executeQuery.cpp:950:30
    #13 0x1c60e0b2 in DB::TCPHandler::runImpl() obj-x86_64-linux-gnu/../src/Server/TCPHandler.cpp:292:24
    #14 0x1c6271b5 in DB::TCPHandler::run() obj-x86_64-linux-gnu/../src/Server/TCPHandler.cpp:1641:9
    #15 0x1d3cf78b in Poco::Net::TCPServerConnection::start() obj-x86_64-linux-gnu/../contrib/poco/Net/src/TCPServerConnection.cpp:43:3
    #16 0x1d3cfc24 in Poco::Net::TCPServerDispatcher::run() obj-x86_64-linux-gnu/../contrib/poco/Net/src/TCPServerDispatcher.cpp:115:20
    #17 0x1d4c01a6 in Poco::PooledThread::run() obj-x86_64-linux-gnu/../contrib/poco/Foundation/src/ThreadPool.cpp:199:14
    #18 0x1d4bda6b in Poco::ThreadImpl::runnableEntry(void*) obj-x86_64-linux-gnu/../contrib/poco/Foundation/src/Thread_POSIX.cpp:345:27
    #19 0x7f1abe834608 in start_thread (/lib/x86_64-linux-gnu/libpthread.so.0+0x9608)
    #20 0x7f1abe75b292 in __clone (/lib/x86_64-linux-gnu/libc.so.6+0x122292)

SUMMARY: UndefinedBehaviorSanitizer: undefined-behavior ../src/Interpreters/ExternalLoader.cpp:1142:33 in
```
const ColumnFixedString & column, const char ** buffer, size_t features_count)
    {
        size_t size = column.size();
        size_t str_size = column.getN();
        PODArray<char> data(size * (str_size + 1));
        char * data_ptr = data.data();
        for (size_t i = 0; i < size; ++i)
        {
            auto ref = column.getDataAt(i);
            memcpy(data_ptr, ref.data, ref.size);
            data_ptr[ref.size] = 0;
            *buffer = data_ptr;
            data_ptr += ref.size + 1;
            buffer += features_count;
        }
        return data;
    }
    
    template <typename T>
    ColumnPtr placeNumericColumns(const ColumnRawPtrs & columns,