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

   
   ## Proposed changes
   
   Issue Number: close #xxx
   
   For sql `select cast('0.00164999999999998' as decimalv3(9,0)); ` be will 
coredump:
   
   ```
   INFO: java_cmd /mnt/disk2/tengjianping/local/jdk1.8.0_131/bin/java
   INFO: jdk_version 8
   *** Query id: 1140fbeb086a499c-85d388ee84060c3f ***
   *** tablet id: 0 ***                                                         
                                                                                
                                                                                
                                                
   *** Aborted at 1699611007 (unix time) try "date -d @1699611007" if you are 
using GNU date ***
   *** Current BE git commitID: ad4bb1671b ***
   *** SIGFPE integer divide by zero (@0x55d7f737ee73) received by PID 88254 
(TID 88575 OR 0x7e9440102700) from PID 18446744073562222195; stack trace: ***
    0# doris::signal::(anonymous namespace)::FailureSignalHandler(int, 
siginfo_t*, void*) at 
/mnt/disk2/tengjianping/doris-38/be/src/common/signal_handler.h:417
    1# 0x00007FC6FB405400 in /lib64/libc.so.6
    2# int doris::StringParser::string_to_decimal<(doris::PrimitiveType)28, 
int>(char const*, int, int, int, doris::StringParser::ParseResult*) at 
/mnt/disk2/tengjianping/doris-38/be/src/util/string_parser.hpp:807
    3# doris::Status 
doris::vectorized::ConvertThroughParsing<doris::vectorized::DataTypeString, 
doris::vectorized::DataTypeDecimal<doris::vectorized::Decimal<int> >, 
doris::vectorized::NameCast>::execute<doris::vectorized::PrecisionScaleArg>(doris::FunctionContext*,
 doris::vectorized::Block&, std::vector<unsigned long, std::allocator<unsigned 
long> > const&, unsigned long, unsigned long, bool, 
doris::vectorized::PrecisionScaleArg) at 
/mnt/disk2/tengjianping/doris-38/be/src/vec/functions/function_cast.h:1396
    4# bool 
doris::vectorized::FunctionCast::create_decimal_wrapper<doris::vectorized::Decimal<int>
 >(std::shared_ptr<doris::vectorized::IDataType const> const&, 
doris::vectorized::DataTypeDecimal<doris::vectorized::Decimal<int> > const*) 
const::{lambda(doris::FunctionContext*, doris::vectorized::Block&, 
std::vector<unsigned long, std::allocator<unsigned long> > const&, unsigned 
long, unsigned long)#1}::operator()(doris::FunctionContext*, 
doris::vectorized::Block&, std::vector<unsigned long, std::allocator<unsigned 
long> > const&, unsigned long, unsigned long) const::{lambda(auto:1 
const&)#1}::operator()<doris::vectorized::TypePair<doris::vectorized::DataTypeString,
 doris::vectorized::DataTypeDecimal<doris::vectorized::Decimal<int> > > 
>(doris::vectorized::TypePair<doris::vectorized::DataTypeString, 
doris::vectorized::DataTypeDecimal<doris::vectorized::Decimal<int> > > const&) 
const at 
/mnt/disk2/tengjianping/doris-38/be/src/vec/functions/function_cast.h:1639
    5# bool 
doris::vectorized::call_on_index_and_data_type<doris::vectorized::DataTypeDecimal<doris::vectorized::Decimal<int>
 >, 
doris::vectorized::FunctionCast::create_decimal_wrapper<doris::vectorized::Decimal<int>
 >(std::shared_ptr<doris::vectorized::IDataType const> const&, 
doris::vectorized::DataTypeDecimal<doris::vectorized::Decimal<int> > const*) 
const::{lambda(doris::FunctionContext*, doris::vectorized::Block&, 
std::vector<unsigned long, std::allocator<unsigned long> > const&, unsigned 
long, unsigned long)#1}::operator()(doris::FunctionContext*, 
doris::vectorized::Block&, std::vector<unsigned long, std::allocator<unsigned 
long> > const&, unsigned long, unsigned long) const::{lambda(auto:1 
const&)#1}>(doris::vectorized::TypeIndex, 
doris::vectorized::FunctionCast::create_decimal_wrapper<doris::vectorized::Decimal<int>
 >(std::shared_ptr<doris::vectorized::IDataType const> const&, 
doris::vectorized::DataTypeDecimal<doris::vectorized::Decimal<int> > const*) 
const::{lambda(doris::F
 unctionContext*, doris::vectorized::Block&, std::vector<unsigned long, 
std::allocator<unsigned long> > const&, unsigned long, unsigned 
long)#1}::operator()(doris::FunctionContext*, doris::vectorized::Block&, 
std::vector<unsigned long, std::allocator<unsigned long> > const&, unsigned 
long, unsigned long) const::{lambda(auto:1 const&)#1}&&) in 
/mnt/disk2/tengjianping/doris-38/output/be/lib/doris_be
    6# 
doris::vectorized::FunctionCast::create_decimal_wrapper<doris::vectorized::Decimal<int>
 >(std::shared_ptr<doris::vectorized::IDataType const> const&, 
doris::vectorized::DataTypeDecimal<doris::vectorized::Decimal<int> > const*) 
const::{lambda(doris::FunctionContext*, doris::vectorized::Block&, 
std::vector<unsigned long, std::allocator<unsigned long> > const&, unsigned 
long, unsigned long)#1}::operator()(doris::FunctionContext*, 
doris::vectorized::Block&, std::vector<unsigned long, std::allocator<unsigned 
long> > const&, unsigned long, unsigned long) const at 
/mnt/disk2/tengjianping/doris-38/be/src/vec/functions/function_cast.h:1650
    7# std::_Function_handler<doris::Status (doris::FunctionContext*, 
doris::vectorized::Block&, std::vector<unsigned long, std::allocator<unsigned 
long> > const&, unsigned long, unsigned long), 
doris::vectorized::FunctionCast::create_decimal_wrapper<doris::vectorized::Decimal<int>
 >(std::shared_ptr<doris::vectorized::IDataType const> const&, 
doris::vectorized::DataTypeDecimal<doris::vectorized::Decimal<int> > const*) 
const::{lambda(doris::FunctionContext*, doris::vectorized::Block&, 
std::vector<unsigned long, std::allocator<unsigned long> > const&, unsigned 
long, unsigned long)#1}>::_M_invoke(std::_Any_data const&, 
doris::FunctionContext*&&, doris::vectorized::Block&, std::vector<unsigned 
long, std::allocator<unsigned long> > const&, unsigned long&&, unsigned long&&) 
at 
/mnt/disk2/tengjianping/local/ldb_toolchain/bin/../lib/gcc/x86_64-linux-gnu/11/../../../../include/c++/11/bits/std_function.h:291
    8# 
doris::vectorized::FunctionCast::prepare_remove_nullable(doris::FunctionContext*,
 std::shared_ptr<doris::vectorized::IDataType const> const&, 
std::shared_ptr<doris::vectorized::IDataType const> const&, bool) 
const::{lambda(doris::FunctionContext*, doris::vectorized::Block&, 
std::vector<unsigned long, std::allocator<unsigned long> > const&, unsigned 
long, unsigned long)#1}::operator()(doris::FunctionContext*, 
doris::vectorized::Block&, std::vector<unsigned long, std::allocator<unsigned 
long> > const&, unsigned long, unsigned long) const at 
/mnt/disk2/tengjianping/doris-38/be/src/vec/functions/function_cast.h:2051
    9# std::_Function_handler<doris::Status (doris::FunctionContext*, 
doris::vectorized::Block&, std::vector<unsigned long, std::allocator<unsigned 
long> > const&, unsigned long, unsigned long), 
doris::vectorized::FunctionCast::prepare_remove_nullable(doris::FunctionContext*,
 std::shared_ptr<doris::vectorized::IDataType const> const&, 
std::shared_ptr<doris::vectorized::IDataType const> const&, bool) 
const::{lambda(doris::FunctionContext*, doris::vectorized::Block&, 
std::vector<unsigned long, std::allocator<unsigned long> > const&, unsigned 
long, unsigned long)#1}>::_M_invoke(std::_Any_data const&, 
doris::FunctionContext*&&, doris::vectorized::Block&, std::vector<unsigned 
long, std::allocator<unsigned long> > const&, unsigned long&&, unsigned long&&) 
at 
/mnt/disk2/tengjianping/local/ldb_toolchain/bin/../lib/gcc/x86_64-linux-gnu/11/../../../../include/c++/11/bits/std_function.h:291
   10# 
doris::vectorized::PreparedFunctionCast::execute_impl(doris::FunctionContext*, 
doris::vectorized::Block&, std::vector<unsigned long, std::allocator<unsigned 
long> > const&, unsigned long, unsigned long) at 
/mnt/disk2/tengjianping/doris-38/be/src/vec/functions/function_cast.h:1315
   11# 
doris::vectorized::PreparedFunctionImpl::default_implementation_for_constant_arguments(doris::FunctionContext*,
 doris::vectorized::Block&, std::vector<unsigned long, std::allocator<unsigned 
long> > const&, unsigned long, unsigned long, bool, bool*) at 
/mnt/disk2/tengjianping/doris-38/be/src/vec/functions/function.cpp:201
   12# 
doris::vectorized::PreparedFunctionImpl::execute_without_low_cardinality_columns(doris::FunctionContext*,
 doris::vectorized::Block&, std::vector<unsigned long, std::allocator<unsigned 
long> > const&, unsigned long, unsigned long, bool) in 
/mnt/disk2/tengjianping/doris-38/output/be/lib/doris_be
   13# 
doris::vectorized::PreparedFunctionImpl::execute(doris::FunctionContext*, 
doris::vectorized::Block&, std::vector<unsigned long, std::allocator<unsigned 
long> > const&, unsigned long, unsigned long, bool) at 
/mnt/disk2/tengjianping/doris-38/be/src/vec/functions/function.cpp:268
   14# doris::vectorized::IFunctionBase::execute(doris::FunctionContext*, 
doris::vectorized::Block&, std::vector<unsigned long, std::allocator<unsigned 
long> > const&, unsigned long, unsigned long, bool) at 
/mnt/disk2/tengjianping/doris-38/be/src/vec/functions/function.h:177
   15# doris::vectorized::VCastExpr::execute(doris::vectorized::VExprContext*, 
doris::vectorized::Block*, int*) at 
/mnt/disk2/tengjianping/doris-38/be/src/vec/exprs/vcast_expr.cpp:110
   16# doris::vectorized::VExprContext::execute(doris::vectorized::Block*, 
int*) at /mnt/disk2/tengjianping/doris-38/be/src/vec/exprs/vexpr_context.cpp:60
   17# doris::vectorized::VUnionNode::get_next_const(doris::RuntimeState*, 
doris::vectorized::Block*) at 
/mnt/disk2/tengjianping/doris-38/be/src/vec/exec/vunion_node.cpp:226
   18# doris::vectorized::VUnionNode::get_next(doris::RuntimeState*, 
doris::vectorized::Block*, bool*) in 
/mnt/disk2/tengjianping/doris-38/output/be/lib/doris_be
   19# doris::ExecNode::pull(doris::RuntimeState*, doris::vectorized::Block*, 
bool*) at /mnt/disk2/tengjianping/doris-38/be/src/exec/exec_node.h:127
   20# std::_Function_handler<doris::Status (doris::RuntimeState*, 
doris::vectorized::Block*, bool*), std::_Bind<doris::Status 
(doris::ExecNode::*(doris::vectorized::VUnionNode*, std::_Placeholder<1>, 
std::_Placeholder<2>, std::_Placeholder<3>))(doris::RuntimeState*, 
doris::vectorized::Block*, bool*)> >::_M_invoke(std::_Any_data const&, 
doris::RuntimeState*&&, doris::vectorized::Block*&&, bool*&&) at 
/mnt/disk2/tengjianping/local/ldb_toolchain/bin/../lib/gcc/x86_64-linux-gnu/11/../../../../include/c++/11/bits/std_function.h:291
   21# doris::ExecNode::get_next_after_projects(doris::RuntimeState*, 
doris::vectorized::Block*, bool*, std::function<doris::Status 
(doris::RuntimeState*, doris::vectorized::Block*, bool*)> const&, bool) at 
/mnt/disk2/tengjianping/doris-38/be/src/exec/exec_node.cpp:596
   22# 
doris::pipeline::SourceOperator<doris::pipeline::ConstValueOperatorBuilder>::get_block(doris::RuntimeState*,
 doris::vectorized::Block*, doris::pipeline::SourceState&) at 
/mnt/disk2/tengjianping/doris-38/be/src/pipeline/exec/operator.h:413
   23# doris::pipeline::PipelineTask::execute(bool*) at 
/mnt/disk2/tengjianping/doris-38/be/src/pipeline/pipeline_task.cpp:259
   24# doris::pipeline::TaskScheduler::_do_work(unsigned long) at 
/mnt/disk2/tengjianping/doris-38/be/src/pipeline/task_scheduler.cpp:266
   ```
   
   The reason is that function common::exp10_i32 called by 
get_scale_multiplier<int>(11) will read out-of-range of the exp_table array, 
which result in Undefined Behaviour, and the if (LIKELY(divisor > 0)) statement 
if false positive.
   
   ## Further comments
   
   If this is a relatively large or complex change, kick off the discussion at 
[d...@doris.apache.org](mailto:d...@doris.apache.org) 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: 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