amorynan opened a new pull request, #37936:
URL: https://github.com/apache/doris/pull/37936

   if we select nested type such as map/array/struct after large string , when 
string type in mysql_row_buf  reserve make buffer size is not large enough , 
which will lead nested type open_dynamic_mode make _pos pointer out range of 
mysql_row_buf, then nested type call push_string, and reserve() will make 
heap_buffer_overflow 
   ```
   ==200769==ERROR: AddressSanitizer: heap-buffer-overflow on address 
0x62d0051c12ba at pc 0x55a77788692d bp 0x7fb52f474a30 sp 0x7fb52f4741f8
   READ of size 36541 at 0x62d0051c12ba thread T2309 (Pipe_normal [wo)
       #0 0x55a77788692c in __asan_memcpy 
(/mnt/disk1/wangqiannan/amory/doris/output/be/lib/doris_be+0x60c1c92c) 
(BuildId: 4513940b6b9e22fa)
       #1 0x55a7a1f622fa in doris::MysqlRowBuffer<false>::reserve(long) 
/mnt/disk1/wangqiannan/amory/doris/be/src/util/mysql_row_buffer.cpp:140:5
       #2 0x55a7a1f638eb in doris::MysqlRowBuffer<false>::push_string(char 
const*, long) 
/mnt/disk1/wangqiannan/amory/doris/be/src/util/mysql_row_buffer.cpp:473:5
       #3 0x55a7a21f16eb in doris::Status 
doris::vectorized::DataTypeMapSerDe::_write_column_to_mysql<false>(doris::vectorized::IColumn
 const&, doris::MysqlRowBuffer<false>&, int, bool, 
doris::vectorized::DataTypeSerDe::FormatOptions const&) const 
/mnt/disk1/wangqiannan/amory/doris/be/src/vec/data_types/serde/data_type_map_serde.cpp:410:21
       #4 0x55a7a21e4c1e in 
doris::vectorized::DataTypeMapSerDe::write_column_to_mysql(doris::vectorized::IColumn
 const&, doris::MysqlRowBuffer<false>&, int, bool, 
doris::vectorized::DataTypeSerDe::FormatOptions const&) const 
/mnt/disk1/wangqiannan/amory/doris/be/src/vec/data_types/serde/data_type_map_serde.cpp:478:12
       #5 0x55a7a22070e6 in doris::Status 
doris::vectorized::DataTypeNullableSerDe::_write_column_to_mysql<false>(doris::vectorized::IColumn
 const&, doris::MysqlRowBuffer<false>&, int, bool, 
doris::vectorized::DataTypeSerDe::FormatOptions const&) const 
/mnt/disk1/wangqiannan/amory/doris/be/src/vec/data_types/serde/data_type_nullable_serde.cpp:300:9
       #6 0x55a7a21fbc5e in 
doris::vectorized::DataTypeNullableSerDe::write_column_to_mysql(doris::vectorized::IColumn
 const&, doris::MysqlRowBuffer<false>&, int, bool, 
doris::vectorized::DataTypeSerDe::FormatOptions const&) const 
/mnt/disk1/wangqiannan/amory/doris/be/src/vec/data_types/serde/data_type_nullable_serde.cpp:317:12
       #7 0x55a7c2e97e6c in 
doris::vectorized::VMysqlResultWriter<false>::write(doris::RuntimeState*, 
doris::vectorized::Block&) 
/mnt/disk1/wangqiannan/amory/doris/be/src/vec/sink/vmysql_result_writer.cpp:216:17
       #8 0x55a7c8031b83 in 
doris::pipeline::ResultSinkOperatorX::sink(doris::RuntimeState*, 
doris::vectorized::Block*, bool) 
/mnt/disk1/wangqiannan/amory/doris/be/src/pipeline/exec/result_sink_operator.cpp:142:5
       #9 0x55a7c99a81d6 in 
doris::pipeline::PipelineTask::execute(bool*)::$_1::operator()() const 
/mnt/disk1/wangqiannan/amory/doris/be/src/pipeline/pipeline_task.cpp:361:38
       #10 0x55a7c99a4b27 in doris::pipeline::PipelineTask::execute(bool*) 
/mnt/disk1/wangqiannan/amory/doris/be/src/pipeline/pipeline_task.cpp:364:22
       #11 0x55a7c9a23a2b in doris::pipeline::TaskScheduler::_do_work(unsigned 
long) 
/mnt/disk1/wangqiannan/amory/doris/be/src/pipeline/task_scheduler.cpp:138:9
       #12 0x55a7c9a269ca in 
doris::pipeline::TaskScheduler::start()::$_0::operator()() const 
/mnt/disk1/wangqiannan/amory/doris/be/src/pipeline/task_scheduler.cpp:64:9
       #13 0x55a7c9a2694e in void std::__invoke_impl<void, 
doris::pipeline::TaskScheduler::start()::$_0&>(std::__invoke_other, 
doris::pipeline::TaskScheduler::start()::$_0&) 
/mnt/disk1/wangqiannan/tool/ldb_toolchain_16/bin/../lib/gcc/x86_64-linux-gnu/11/../../../../include/c++/11/bits/invoke.h:61:14
       #14 0x55a7c9a268ae in std::enable_if<is_invocable_r_v<void, 
doris::pipeline::TaskScheduler::start()::$_0&>, void>::type 
std::__invoke_r<void, 
doris::pipeline::TaskScheduler::start()::$_0&>(doris::pipeline::TaskScheduler::start()::$_0&)
 
/mnt/disk1/wangqiannan/tool/ldb_toolchain_16/bin/../lib/gcc/x86_64-linux-gnu/11/../../../../include/c++/11/bits/invoke.h:111:2
       #15 0x55a7c9a26635 in std::_Function_handler<void (), 
doris::pipeline::TaskScheduler::start()::$_0>::_M_invoke(std::_Any_data const&) 
/mnt/disk1/wangqiannan/tool/ldb_toolchain_16/bin/../lib/gcc/x86_64-linux-gnu/11/../../../../include/c++/11/bits/std_function.h:291:9
       #16 0x55a777b226da in std::function<void ()>::operator()() const 
/mnt/disk1/wangqiannan/tool/ldb_toolchain_16/bin/../lib/gcc/x86_64-linux-gnu/11/../../../../include/c++/11/bits/std_function.h:560:9
       #17 0x55a77e95ec94 in doris::FunctionRunnable::run() 
/mnt/disk1/wangqiannan/amory/doris/be/src/util/threadpool.cpp:48:27
       #18 0x55a77e941015 in doris::ThreadPool::dispatch_thread() 
/mnt/disk1/wangqiannan/amory/doris/be/src/util/threadpool.cpp:543:24
       #19 0x55a77e97eb23 in void std::__invoke_impl<void, void 
(doris::ThreadPool::*&)(), doris::ThreadPool*&>(std::__invoke_memfun_deref, 
void (doris::ThreadPool::*&)(), doris::ThreadPool*&) 
/mnt/disk1/wangqiannan/tool/ldb_toolchain_16/bin/../lib/gcc/x86_64-linux-gnu/11/../../../../include/c++/11/bits/invoke.h:74:14
       #20 0x55a77e97e928 in std::__invoke_result<void 
(doris::ThreadPool::*&)(), doris::ThreadPool*&>::type std::__invoke<void 
(doris::ThreadPool::*&)(), doris::ThreadPool*&>(void (doris::ThreadPool::*&)(), 
doris::ThreadPool*&) 
/mnt/disk1/wangqiannan/tool/ldb_toolchain_16/bin/../lib/gcc/x86_64-linux-gnu/11/../../../../include/c++/11/bits/invoke.h:96:14
       #21 0x55a77e97e860 in void std::_Bind<void (doris::ThreadPool::* 
(doris::ThreadPool*))()>::__call<void, 0ul>(std::tuple<>&&, 
std::_Index_tuple<0ul>) 
/mnt/disk1/wangqiannan/tool/ldb_toolchain_16/bin/../lib/gcc/x86_64-linux-gnu/11/../../../../include/c++/11/functional:420:11
       #22 0x55a77e97e655 in void std::_Bind<void (doris::ThreadPool::* 
(doris::ThreadPool*))()>::operator()<void>() 
/mnt/disk1/wangqiannan/tool/ldb_toolchain_16/bin/../lib/gcc/x86_64-linux-gnu/11/../../../../include/c++/11/functional:503:17
       #23 0x55a77e97e54e in void std::__invoke_impl<void, std::_Bind<void 
(doris::ThreadPool::* (doris::ThreadPool*))()>&>(std::__invoke_other, 
std::_Bind<void (doris::ThreadPool::* (doris::ThreadPool*))()>&) 
/mnt/disk1/wangqiannan/tool/ldb_toolchain_16/bin/../lib/gcc/x86_64-linux-gnu/11/../../../../include/c++/11/bits/invoke.h:61:14
       #24 0x55a77e97e48e in 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*))()>&) 
/mnt/disk1/wangqiannan/tool/ldb_toolchain_16/bin/../lib/gcc/x86_64-linux-gnu/11/../../../../include/c++/11/bits/invoke.h:111:2
       #25 0x55a77e97dd85 in std::_Function_handler<void (), std::_Bind<void 
(doris::ThreadPool::* (doris::ThreadPool*))()>>::_M_invoke(std::_Any_data 
const&) 
/mnt/disk1/wangqiannan/tool/ldb_toolchain_16/bin/../lib/gcc/x86_64-linux-gnu/11/../../../../include/c++/11/bits/std_function.h:291:9
       #26 0x55a777b226da in std::function<void ()>::operator()() const 
/mnt/disk1/wangqiannan/tool/ldb_toolchain_16/bin/../lib/gcc/x86_64-linux-gnu/11/../../../../include/c++/11/bits/std_function.h:560:9
       #27 0x55a77e8fb841 in doris::Thread::supervise_thread(void*) 
/mnt/disk1/wangqiannan/amory/doris/be/src/util/thread.cpp:498:5
       #28 0x7fc1c3a111c9 in start_thread (/lib64/libpthread.so.0+0x81c9) 
(BuildId: 823fccea3475e5870a4167dfe47df20e53222db0)
       #29 0x7fc1c4400e72 in clone (/lib64/libc.so.6+0x39e72) (BuildId: 
ec3d7025354f1f1985831ff08ef0eb3b50aefbce)
   
   0x62d0051c12ba is located 0 bytes after 36538-byte region 
[0x62d0051b8400,0x62d0051c12ba)
   allocated by thread T2309 (Pipe_normal [wo) here:
       #0 0x55a7778c20bd in operator new[](unsigned long) 
(/mnt/disk1/wangqiannan/amory/doris/output/be/lib/doris_be+0x60c580bd) 
(BuildId: 4513940b6b9e22fa)
       #1 0x55a7a1f621c1 in doris::MysqlRowBuffer<false>::reserve(long) 
/mnt/disk1/wangqiannan/amory/doris/be/src/util/mysql_row_buffer.cpp:137:21
       #2 0x55a7a1f638eb in doris::MysqlRowBuffer<false>::push_string(char 
const*, long) 
/mnt/disk1/wangqiannan/amory/doris/be/src/util/mysql_row_buffer.cpp:473:5
       #3 0x55a7a1fd0d75 in doris::Status 
doris::vectorized::DataTypeStringSerDeBase<doris::vectorized::ColumnStr<unsigned
 int>>::_write_column_to_mysql<false>(doris::vectorized::IColumn const&, 
doris::MysqlRowBuffer<false>&, int, bool, 
doris::vectorized::DataTypeSerDe::FormatOptions const&) const 
/mnt/disk1/wangqiannan/amory/doris/be/src/vec/data_types/serde/data_type_string_serde.h:260:16
       #4 0x55a7a1fccc1e in 
doris::vectorized::DataTypeStringSerDeBase<doris::vectorized::ColumnStr<unsigned
 int>>::write_column_to_mysql(doris::vectorized::IColumn const&, 
doris::MysqlRowBuffer<false>&, int, bool, 
doris::vectorized::DataTypeSerDe::FormatOptions const&) const 
/mnt/disk1/wangqiannan/amory/doris/be/src/vec/data_types/serde/data_type_string_serde.h:215:16
       #5 0x55a7c2e97e6c in 
doris::vectorized::VMysqlResultWriter<false>::write(doris::RuntimeState*, 
doris::vectorized::Block&) 
/mnt/disk1/wangqiannan/amory/doris/be/src/vec/sink/vmysql_result_writer.cpp:216:17
       #6 0x55a7c8031b83 in 
doris::pipeline::ResultSinkOperatorX::sink(doris::RuntimeState*, 
doris::vectorized::Block*, bool) 
/mnt/disk1/wangqiannan/amory/doris/be/src/pipeline/exec/result_sink_operator.cpp:142:5
       #7 0x55a7c99a81d6 in 
doris::pipeline::PipelineTask::execute(bool*)::$_1::operator()() const 
/mnt/disk1/wangqiannan/amory/doris/be/src/pipeline/pipeline_task.cpp:361:38
   ```
   
   ## Proposed changes
   
   Issue Number: close #xxx
   
   <!--Describe your changes.-->
   
   


-- 
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: commits-unsubscr...@doris.apache.org

For queries about this service, please contact Infrastructure at:
us...@infra.apache.org


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org
For additional commands, e-mail: commits-h...@doris.apache.org

Reply via email to