xy720 opened a new pull request, #13074:
URL: https://github.com/apache/doris/pull/13074
# Proposed changes
How to reproduce?
```
mysql> create table tbl (
id int,
c_array array<int(11)>
)
duplicate key(id)
distributed by hash(id) buckets 1
properties(
'replication_num' = '2'
);
mysql> insert into tbl select k1, collect_list(k3) from test_query_qa.test
group by k1;
Query OK, 255 rows affected (0.34 sec)
{'label':'insert_30b676178e12467d_8225f747fcbe3104', 'status':'VISIBLE',
'txnId':'1014'}
select c_array from tbl;
```
Be will core.
This bug is caused by a memory buffer overflow.
Coredump:
```
*** SIGSEGV address not mapped to object (@0x7ff28588e000) received by PID
80401 (TID 0x7ff2fb3d7700) from PID 18446744071654924288; stack trace: ***
0# doris::signal::(anonymous namespace)::FailureSignalHandler(int,
siginfo_t*, void*) at
/home/disk4/xuyang/work/baidu/bdg/doris/core/be/src/common/signal_handler.h:420
1# 0x00007FF342660570 in /lib64/libc.so.6
2# __GI_memcpy in /lib64/libc.so.6
3# __asan_memcpy in /home/disk4/xuyang/work/be/lib/palo_be
4# doris::vectorized::ColumnVector<int>::insert_many_in_copy_way(char
const*, unsigned long) at
/home/disk4/xuyang/work/baidu/bdg/doris/core/be/src/vec/columns/column_vector.h:175
5# doris::vectorized::ColumnVector<int>::insert_many_fix_len_data(char
const*, unsigned long) at
/home/disk4/xuyang/work/baidu/bdg/doris/core/be/src/vec/columns/column_vector.h:218
6# doris::vectorized::ColumnNullable::insert_many_fix_len_data(char const*,
unsigned long) at
/home/disk4/xuyang/work/baidu/bdg/doris/core/be/src/vec/columns/column_nullable.h:112
7#
doris::segment_v2::BitShufflePageDecoder<(doris::FieldType)5>::next_batch(unsigned
long*,
COW<doris::vectorized::IColumn>::mutable_ptr<doris::vectorized::IColumn>&) at
/home/disk4/xuyang/work/baidu/bdg/doris/core/be/src/olap/rowset/segment_v2/bitshuffle_page.h:402
8# doris::segment_v2::FileColumnIterator::next_batch(unsigned long*,
COW<doris::vectorized::IColumn>::mutable_ptr<doris::vectorized::IColumn>&,
bool*) at
/home/disk4/xuyang/work/baidu/bdg/doris/core/be/src/olap/rowset/segment_v2/column_reader.cpp:827
9# doris::segment_v2::ArrayFileColumnIterator::next_batch(unsigned long*,
COW<doris::vectorized::IColumn>::mutable_ptr<doris::vectorized::IColumn>&,
bool*) at
/home/disk4/xuyang/work/baidu/bdg/doris/core/be/src/olap/rowset/segment_v2/column_reader.cpp:602
10# doris::segment_v2::ColumnIterator::next_batch(unsigned long*,
COW<doris::vectorized::IColumn>::mutable_ptr<doris::vectorized::IColumn>&) at
/home/disk4/xuyang/work/baidu/bdg/doris/core/be/src/olap/rowset/segment_v2/column_reader.h:249
11# doris::segment_v2::SegmentIterator::_read_columns(std::vector<unsigned
int, std::allocator<unsigned int> > const&,
std::vector<COW<doris::vectorized::IColumn>::mutable_ptr<doris::vectorized::IColumn>,
std::allocator<COW<doris::vectorized::IColumn>::mutable_ptr<doris::
vectorized::IColumn> > >&, unsigned long) at
/home/disk4/xuyang/work/baidu/bdg/doris/core/be/src/olap/rowset/segment_v2/segment_iterator.cpp:908
12# doris::segment_v2::SegmentIterator::_read_columns_by_index(unsigned int,
unsigned int&, bool) at
/home/disk4/xuyang/work/baidu/bdg/doris/core/be/src/olap/rowset/segment_v2/segment_iterator.cpp:995
13#
doris::segment_v2::SegmentIterator::next_batch(doris::vectorized::Block*) at
/home/disk4/xuyang/work/baidu/bdg/doris/core/be/src/olap/rowset/segment_v2/segment_iterator.cpp:1153
14# doris::BetaRowsetReader::next_block(doris::vectorized::Block*) at
/home/disk4/xuyang/work/baidu/bdg/doris/core/be/src/olap/rowset/beta_rowset_reader.cpp:276
15#
doris::vectorized::VCollectIterator::Level0Iterator::next(doris::vectorized::Block*)
at
/home/disk4/xuyang/work/baidu/bdg/doris/core/be/src/vec/olap/vcollect_iterator.cpp:261
16#
doris::vectorized::VCollectIterator::Level1Iterator::_normal_next(doris::vectorized::Block*)
at
/home/disk4/xuyang/work/baidu/bdg/doris/core/be/src/vec/olap/vcollect_iterator.cpp:527
17#
doris::vectorized::VCollectIterator::Level1Iterator::_normal_next(doris::vectorized::Block*)
at
/home/disk4/xuyang/work/baidu/bdg/doris/core/be/src/vec/olap/vcollect_iterator.cpp:536
18#
doris::vectorized::VCollectIterator::Level1Iterator::next(doris::vectorized::Block*)
in /home/disk4/xuyang/work/be/lib/palo_be
19# doris::vectorized::VCollectIterator::next(doris::vectorized::Block*) at
/home/disk4/xuyang/work/baidu/bdg/doris/core/be/src/vec/olap/vcollect_iterator.cpp:181
20#
doris::vectorized::BlockReader::_direct_next_block(doris::vectorized::Block*,
doris::MemPool*, doris::ObjectPool*, bool*) at
/home/disk4/xuyang/work/baidu/bdg/doris/core/be/src/vec/olap/block_reader.cpp:174
21#
doris::vectorized::BlockReader::next_block_with_aggregation(doris::vectorized::Block*,
doris::MemPool*, doris::ObjectPool*, bool*) at
/home/disk4/xuyang/work/baidu/bdg/doris/core/be/src/vec/olap/block_reader.h:45
22# doris::vectorized::NewOlapScanner::_get_block_impl(doris::RuntimeState*,
doris::vectorized::Block*, bool*) at
/home/disk4/xuyang/work/baidu/bdg/doris/core/be/src/vec/exec/scan/new_olap_scanner.cpp:308
23# doris::vectorized::VScanner::get_block(doris::RuntimeState*,
doris::vectorized::Block*, bool*) at
/home/disk4/xuyang/work/baidu/bdg/doris/core/be/src/vec/exec/scan/vscanner.cpp:55
24#
doris::vectorized::ScannerScheduler::_scanner_scan(doris::vectorized::ScannerScheduler*,
doris::vectorized::ScannerContext*, doris::vectorized::VScanner*) at
/home/disk4/xuyang/work/baidu/bdg/doris/core/be/src/vec/exec/scan/scanner_scheduler.cpp:243
25#
doris::vectorized::ScannerScheduler::_schedule_scanners(doris::vectorized::ScannerContext*)::$_1::operator()()
const at
/home/disk4/xuyang/work/baidu/bdg/doris/core/be/src/vec/exec/scan/scanner_scheduler.cpp:146
26# void std::__invoke_impl<void,
doris::vectorized::ScannerScheduler::_schedule_scanners(doris::vectorized::ScannerContext*)::$_1&>(std::__invoke_other,
doris::vectorized::ScannerScheduler::_schedule_scanners(doris::vectorized::ScannerContext*)::$_1&)
at /home/disk4/xuya
ng/work/baidu/bdg/doris/palo-toolchain/ldb_toolchain/bin/../lib/gcc/x86_64-linux-gnu/11/../../../../include/c++/11/bits/invoke.h:61
27# std::enable_if<is_invocable_r_v<void,
doris::vectorized::ScannerScheduler::_schedule_scanners(doris::vectorized::ScannerContext*)::$_1&>,
void>::type std::__invoke_r<void,
doris::vectorized::ScannerScheduler::_schedule_scanners(doris::vectorized::ScannerContext*)::$_1
&>(doris::vectorized::ScannerScheduler::_schedule_scanners(doris::vectorized::ScannerContext*)::$_1&)
at
/home/disk4/xuyang/work/baidu/bdg/doris/palo-toolchain/ldb_toolchain/bin/../lib/gcc/x86_64-linux-gnu/11/../../../../include/c++/11/bits/invoke.h:117
28# std::_Function_handler<void (),
doris::vectorized::ScannerScheduler::_schedule_scanners(doris::vectorized::ScannerContext*)::$_1>::_M_invoke(std::_Any_data
const&) at
/home/disk4/xuyang/work/baidu/bdg/doris/palo-toolchain/ldb_toolchain/bin/../lib/gcc/x86_64-linux-gnu/
11/../../../../include/c++/11/bits/std_function.h:291
29# std::function<void ()>::operator()() const at
/home/disk4/xuyang/work/baidu/bdg/doris/palo-toolchain/ldb_toolchain/bin/../lib/gcc/x86_64-linux-gnu/11/../../../../include/c++/11/bits/std_function.h:560
30# doris::FunctionRunnable::run() at
/home/disk4/xuyang/work/baidu/bdg/doris/core/be/src/util/threadpool.cpp:45
31# doris::ThreadPool::dispatch_thread() at
/home/disk4/xuyang/work/baidu/bdg/doris/core/be/src/util/threadpool.cpp:540
32# void std::__invoke_impl<void, void (doris::ThreadPool::*&)(),
doris::ThreadPool*&>(std::__invoke_memfun_deref, void
(doris::ThreadPool::*&)(), doris::ThreadPool*&) at
/home/disk4/xuyang/work/baidu/bdg/doris/palo-toolchain/ldb_toolchain/bin/../lib/gcc/x86_64-linux-gnu/
11/../../../../include/c++/11/bits/invoke.h:74
33# std::__invoke_result<void (doris::ThreadPool::*&)(),
doris::ThreadPool*&>::type std::__invoke<void (doris::ThreadPool::*&)(),
doris::ThreadPool*&>(void (doris::ThreadPool::*&)(), doris::ThreadPool*&) at
/home/disk4/xuyang/work/baidu/bdg/doris/palo-toolchain/ldb_toolch
ain/bin/../lib/gcc/x86_64-linux-gnu/11/../../../../include/c++/11/bits/invoke.h:96
34# void std::_Bind<void
(doris::ThreadPool::*(doris::ThreadPool*))()>::__call<void, ,
0ul>(std::tuple<>&&, std::_Index_tuple<0ul>) at
/home/disk4/xuyang/work/baidu/bdg/doris/palo-toolchain/ldb_toolchain/bin/../lib/gcc/x86_64-linux-gnu/11/../../../../include/c++/11/functi
onal:420
35# void std::_Bind<void
(doris::ThreadPool::*(doris::ThreadPool*))()>::operator()<, void>() at
/home/disk4/xuyang/work/baidu/bdg/doris/palo-toolchain/ldb_toolchain/bin/../lib/gcc/x86_64-linux-gnu/11/../../../../include/c++/11/functional:503
36# void std::__invoke_impl<void, std::_Bind<void
(doris::ThreadPool::*(doris::ThreadPool*))()>&>(std::__invoke_other,
std::_Bind<void (doris::ThreadPool::*(doris::ThreadPool*))()>&) at
/home/disk4/xuyang/work/baidu/bdg/doris/palo-toolchain/ldb_toolchain/bin/../lib/gcc/x8
6_64-linux-gnu/11/../../../../include/c++/11/bits/invoke.h:61
37# std::enable_if<is_invocable_r_v<void, std::_Bind<void
(doris::ThreadPool::*(doris::ThreadPool*))()>&>, void>::type
std::__invoke_r<void, std::_Bind<void
(doris::ThreadPool::*(doris::ThreadPool*))()>&>(std::_Bind<void
(doris::ThreadPool::*(doris::ThreadPool*))()>&) at
/home/disk4/xuyang/work/baidu/bdg/doris/palo-toolchain/ldb_toolchain/bin/../lib/gcc/x86_64-linux-gnu/11/../../../../include/c++/11/bits/invoke.h:117
38# std::_Function_handler<void (), std::_Bind<void
(doris::ThreadPool::*(doris::ThreadPool*))()> >::_M_invoke(std::_Any_data
const&) at
/home/disk4/xuyang/work/baidu/bdg/doris/palo-toolchain/ldb_toolchain/bin/../lib/gcc/x86_64-linux-gnu/11/../../../../include/c++/11/bits
/std_function.h:291
39# std::function<void ()>::operator()() const at
/home/disk4/xuyang/work/baidu/bdg/doris/palo-toolchain/ldb_toolchain/bin/../lib/gcc/x86_64-linux-gnu/11/../../../../include/c++/11/bits/std_function.h:560
40# doris::Thread::supervise_thread(void*) at
/home/disk4/xuyang/work/baidu/bdg/doris/core/be/src/util/thread.cpp:425
41# start_thread in /lib64/libpthread.so.0
42# __clone in /lib64/libc.so.6
```
## Problem summary
Describe your changes.
## Checklist(Required)
1. Does it affect the original behavior:
- [ ] Yes
- [x] No
- [ ] I don't know
2. Has unit tests been added:
- [ ] Yes
- [ ] No
- [x] No Need
3. Has document been added or modified:
- [ ] Yes
- [ ] No
- [x] No Need
4. Does it need to update dependencies:
- [ ] Yes
- [x] No
5. Are there any changes that cannot be rolled back:
- [ ] Yes (If Yes, please explain WHY)
- [x] No
## Further comments
If this is a relatively large or complex change, kick off the discussion at
[[email protected]](mailto:[email protected]) by explaining why you
chose the solution you did and what alternatives you considered, etc...
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]