**Describe the bug**
https://clickhouse-test-reports.s3.yandex.net/19702/c74631c650b42e4d107254a03bd82c2c2913039b/fuzzer_msan/server.log

Most likely introduced here: #11006
bool last = i + 1 == size;
        num_rows += stream.read(columns, rows_per_granule[i], !last);
    }
    stream.skip(result.numRowsToSkipInLastGranule());
    num_rows += stream.finalize(columns);
    /// 
    if (num_rows && num_rows != result.totalRowsPerGranule())
        throw Exception("RangeReader read " + toString(num_rows) + " rows, but "
                        + toString(result.totalRowsPerGranule()) + " expected.", ErrorCodes::LOGICAL_ERROR);
    return columns;
}
void MergeTreeRangeReader::executePrewhereActionsAndFilterColumns(ReadResult & result)
{
    if (!prewhere)
        return;
    const auto & header = merge_tree_reader->getColumns();
    size_t num_columns = header.size();
    if (result.columns.size() != num_columns)
        throw Exception("Invalid number of columns passed to MergeTreeRangeReader. "
                        "Expected " + toString(num_columns) + ", "
                        "got " + toString(result.columns.size()), ErrorCodes::LOGICAL_ERROR);
    ColumnPtr filter;
    size_t prewhere_column_pos;
    {
        /// 
        Block block;
        size_t pos = 0;
        if (prev_reader)
        {
            for (const auto & col : prev_reader->getSampleBlock())