Skip to content

Conversation

mariadb-LeonidFedorov
Copy link
Collaborator

Handling overflows we got from UBSan on the stacktraces

/mdb/verylongdirnameforverystrangecpackbehavior/storage/columnstore/columnstore/utils/funcexp/funchelpers.h:569:24: runtime error: signed integer overflow: 999999999 * 10 cannot be represented in type 'int'
    #0 0x7faed73a86ae in funcexp::helpers::getNumbers(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, int*, execplan::OpType) /usr/src/mariadb-10.6-1:10.6.23.18+maria~ubu2404/storage/columnstore/columnstore/utils/funcexp/funchelpers.h:569
    #1 0x7faed73a86ae in funcexp::helpers::dateAdd(unsigned long, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, execplan::IntervalColumn::interval_type, bool, execplan::OpType) /usr/src/mariadb-10.6-1:10.6.23.18+maria~ubu2404/storage/columnstore/columnstore/utils/funcexp/func_date_add.cpp:90
    #2 0x7faed744e3ea in makedate /usr/src/mariadb-10.6-1:10.6.23.18+maria~ubu2404/storage/columnstore/columnstore/utils/funcexp/func_makedate.cpp:155
    #3 0x7faed72f1c82 in funcexp::FuncExp::evaluate(rowgroup::Row&, std::vector<boost::shared_ptr<execplan::ReturnedColumn>, std::allocator<boost::shared_ptr<execplan::ReturnedColumn> > >&) /usr/src/mariadb-10.6-1:10.6.23.18+maria~ubu2404/storage/columnstore/columnstore/utils/funcexp/funcexp.cpp:310
    #4 0x7faed7319676 in funcexp::FuncExpWrapper::evaluate(rowgroup::Row*) /usr/src/mariadb-10.6-1:10.6.23.18+maria~ubu2404/storage/columnstore/columnstore/utils/funcexp/funcexpwrapper.cpp:123
    #5 0x644b589ef64f in primitiveprocessor::BatchPrimitiveProcessor::execute(boost::shared_ptr<messageqcpp::ByteStream>&) /usr/src/mariadb-10.6-1:10.6.23.18+maria~ubu2404/storage/columnstore/columnstore/primitives/primproc/batchprimitiveprocessor.cpp:1626
    #6 0x644b589f76b4 in primitiveprocessor::BatchPrimitiveProcessor::operator()() /usr/src/mariadb-10.6-1:10.6.23.18+maria~ubu2404/storage/columnstore/columnstore/primitives/primproc/batchprimitiveprocessor.cpp:2236
    #7 0x644b58a3cee7 in primitiveprocessor::BPPSeeder::operator()() /usr/src/mariadb-10.6-1:10.6.23.18+maria~ubu2404/storage/columnstore/columnstore/primitives/primproc/bppseeder.cpp:248
    #8 0x7faed852089c in threadpool::FairThreadPool::threadFcn(threadpool::PriorityThreadPool::Priority) /usr/src/mariadb-10.6-1:10.6.23.18+maria~ubu2404/storage/columnstore/columnstore/utils/threadpool/fair_threadpool.cpp:221
    #9 0x7faed88c2473 in thread_proxy (/lib/x86_64-linux-gnu/librwlock.so+0x71473) (BuildId: 94fed303bc7557ac38bbe035b22e29081ce870bd)
    #10 0x7faed5813aa3 in start_thread nptl/pthread_create.c:447
    #11 0x7faed58a0c3b in clone3 ../sysdeps/unix/sysv/linux/x86_64/clone3.S:78

/mdb/verylongdirnameforverystrangecpackbehavior/storage/columnstore/columnstore/utils/funcexp/funchelpers.h:399:9: runtime error: signed integer overflow: 1000000000000000000 * 10 cannot be represented in type 'long int'
    #0 0x7faed7470fcb in void funcexp::helpers::decimalPlaceDec<long>(long&, long&, signed char&) /usr/src/mariadb-10.6-1:10.6.23.18+maria~ubu2404/storage/columnstore/columnstore/utils/funcexp/funchelpers.h:399
    #1 0x7faed74d2941 in funcexp::Func_round::getDecimalVal(rowgroup::Row&, std::vector<boost::shared_ptr<execplan::ParseTree>, std::allocator<boost::shared_ptr<execplan::ParseTree> > >&, bool&, execplan::CalpontSystemCatalog::ColType&) /usr/src/mariadb-10.6-1:10.6.23.18+maria~ubu2404/storage/columnstore/columnstore/utils/funcexp/func_round.cpp:340
    #2 0x7faedac3d57c in execplan::FunctionColumn::getDecimalVal(rowgroup::Row&, bool&) /usr/src/mariadb-10.6-1:10.6.23.18+maria~ubu2404/storage/columnstore/columnstore/dbcon/execplan/functioncolumn.h:259
    #3 0x7faed72f1e7f in funcexp::FuncExp::evaluate(rowgroup::Row&, std::vector<boost::shared_ptr<execplan::ReturnedColumn>, std::allocator<boost::shared_ptr<execplan::ReturnedColumn> > >&) /usr/src/mariadb-10.6-1:10.6.23.18+maria~ubu2404/storage/columnstore/columnstore/utils/funcexp/funcexp.cpp:522
    #4 0x7faed7319676 in funcexp::FuncExpWrapper::evaluate(rowgroup::Row*) /usr/src/mariadb-10.6-1:10.6.23.18+maria~ubu2404/storage/columnstore/columnstore/utils/funcexp/funcexpwrapper.cpp:123
    #5 0x644b589ef64f in primitiveprocessor::BatchPrimitiveProcessor::execute(boost::shared_ptr<messageqcpp::ByteStream>&) /usr/src/mariadb-10.6-1:10.6.23.18+maria~ubu2404/storage/columnstore/columnstore/primitives/primproc/batchprimitiveprocessor.cpp:1626
    #6 0x644b589f76b4 in primitiveprocessor::BatchPrimitiveProcessor::operator()() /usr/src/mariadb-10.6-1:10.6.23.18+maria~ubu2404/storage/columnstore/columnstore/primitives/primproc/batchprimitiveprocessor.cpp:2236
    #7 0x644b58a3cee7 in primitiveprocessor::BPPSeeder::operator()() /usr/src/mariadb-10.6-1:10.6.23.18+maria~ubu2404/storage/columnstore/columnstore/primitives/primproc/bppseeder.cpp:248
    #8 0x7faed852089c in threadpool::FairThreadPool::threadFcn(threadpool::PriorityThreadPool::Priority) /usr/src/mariadb-10.6-1:10.6.23.18+maria~ubu2404/storage/columnstore/columnstore/utils/threadpool/fair_threadpool.cpp:221
    #9 0x7faed88c2473 in thread_proxy (/lib/x86_64-linux-gnu/librwlock.so+0x71473) (BuildId: 94fed303bc7557ac38bbe035b22e29081ce870bd)
    #10 0x7faed5813aa3 in start_thread nptl/pthread_create.c:447
    #11 0x7faed58a0c3b in clone3 ../sysdeps/unix/sysv/linux/x86_64/clone3.S:78

/mdb/verylongdirnameforverystrangecpackbehavior/storage/columnstore/columnstore/dbcon/execplan/arithmeticoperator.h:351:31: runtime error: signed integer overflow: 16000000000000000 * 781 cannot be represented in type 'long int'
    #0 0x7faedabc9dad in long execplan::ArithmeticOperator::execute<long>(long, long, bool&) /usr/src/mariadb-10.6-1:10.6.23.18+maria~ubu2404/storage/columnstore/columnstore/dbcon/execplan/arithmeticoperator.h:351
    #1 0x7faedabc9dad in execplan::ArithmeticOperator::evaluate(rowgroup::Row&, bool&, execplan::ParseTree*, execplan::ParseTree*) /usr/src/mariadb-10.6-1:10.6.23.18+maria~ubu2404/storage/columnstore/columnstore/dbcon/execplan/arithmeticoperator.h:239
    #2 0x7faedabccd77 in execplan::ArithmeticOperator::getIntVal(rowgroup::Row&, bool&, execplan::ParseTree*, execplan::ParseTree*) /usr/src/mariadb-10.6-1:10.6.23.18+maria~ubu2404/storage/columnstore/columnstore/dbcon/execplan/arithmeticoperator.h:124
    #3 0x7faed72f1dea in funcexp::FuncExp::evaluate(rowgroup::Row&, std::vector<boost::shared_ptr<execplan::ReturnedColumn>, std::allocator<boost::shared_ptr<execplan::ReturnedColumn> > >&) /usr/src/mariadb-10.6-1:10.6.23.18+maria~ubu2404/storage/columnstore/columnstore/utils/funcexp/funcexp.cpp:383
    #4 0x7faed7319676 in funcexp::FuncExpWrapper::evaluate(rowgroup::Row*) /usr/src/mariadb-10.6-1:10.6.23.18+maria~ubu2404/storage/columnstore/columnstore/utils/funcexp/funcexpwrapper.cpp:123
    #5 0x644b589f1e3a in primitiveprocessor::BatchPrimitiveProcessor::execute(boost::shared_ptr<messageqcpp::ByteStream>&) /usr/src/mariadb-10.6-1:10.6.23.18+maria~ubu2404/storage/columnstore/columnstore/primitives/primproc/batchprimitiveprocessor.cpp:1793
    #6 0x644b589f76b4 in primitiveprocessor::BatchPrimitiveProcessor::operator()() /usr/src/mariadb-10.6-1:10.6.23.18+maria~ubu2404/storage/columnstore/columnstore/primitives/primproc/batchprimitiveprocessor.cpp:2236
    #7 0x644b58a3cee7 in primitiveprocessor::BPPSeeder::operator()() /usr/src/mariadb-10.6-1:10.6.23.18+maria~ubu2404/storage/columnstore/columnstore/primitives/primproc/bppseeder.cpp:248
    #8 0x7faed852089c in threadpool::FairThreadPool::threadFcn(threadpool::PriorityThreadPool::Priority) /usr/src/mariadb-10.6-1:10.6.23.18+maria~ubu2404/storage/columnstore/columnstore/utils/threadpool/fair_threadpool.cpp:221
    #9 0x7faed88c2473 in thread_proxy (/lib/x86_64-linux-gnu/librwlock.so+0x71473) (BuildId: 94fed303bc7557ac38bbe035b22e29081ce870bd)
    #10 0x7faed5813aa3 in start_thread nptl/pthread_create.c:447
    #11 0x7faed58a0c3b in clone3 ../sysdeps/unix/sysv/linux/x86_64/clone3.S:78

Copy link
Contributor

@mariadb-SergeyZefirov mariadb-SergeyZefirov left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I agree with most of changes.

The round function produces internal error because it compute a multiplier (second parameter in decimalPlaceDec() call) for int64_t type even for wide decimals.

I think that code in getDecimalValue that handle integer and decimal types should be factored out into a template and branch for for wide decimals it should be performed with int128_t..

@mariadb-SergeyZefirov mariadb-SergeyZefirov force-pushed the MCOL-6018-overflows branch 4 times, most recently from 74d9c8a to 552e2a7 Compare August 22, 2025 11:08
@mariadb-SergeyZefirov mariadb-SergeyZefirov marked this pull request as ready for review August 22, 2025 12:15
@mariadb-SergeyZefirov mariadb-SergeyZefirov force-pushed the MCOL-6018-overflows branch 4 times, most recently from 86f7b4d to 98f4f39 Compare August 31, 2025 19:52
@mariadb-SergeyZefirov mariadb-SergeyZefirov force-pushed the MCOL-6018-overflows branch 2 times, most recently from 1faef44 to 0f67241 Compare September 15, 2025 15:13
Now we are more in line with server's behavior, if strict mode is enabled.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants