[Bug](Datetime) Fix date time function mem use after free (#16814)

This commit is contained in:
HappenLee
2023-02-16 16:15:58 +08:00
committed by GitHub
parent ce7791c362
commit de1337511c
3 changed files with 13 additions and 7 deletions

View File

@ -452,8 +452,8 @@ struct DateTimeAddIntervalImpl {
const auto is_nullable = block.get_by_position(result).type->is_nullable();
if (const auto* sources = check_and_get_column<ColumnVector<FromType1>>(source_col.get())) {
auto col_to = ColumnVector<ToType>::create();
const IColumn& delta_column =
*remove_nullable(block.get_by_position(arguments[1]).column);
auto delta_column_ptr = remove_nullable(block.get_by_position(arguments[1]).column);
const IColumn& delta_column = *delta_column_ptr;
if (is_nullable) {
auto null_map = ColumnUInt8::create(input_rows_count, 0);
@ -545,16 +545,17 @@ struct DateTimeAddIntervalImpl {
auto col_to = ColumnVector<ToType>::create();
if (is_nullable) {
auto null_map = ColumnUInt8::create(input_rows_count, 0);
auto not_nullable_column_ptr_arg1 =
remove_nullable(block.get_by_position(arguments[1]).column);
if (const auto* delta_vec_column = check_and_get_column<ColumnVector<FromType2>>(
*remove_nullable(block.get_by_position(arguments[1]).column))) {
*not_nullable_column_ptr_arg1)) {
Op::constant_vector(sources_const->template get_value<FromType1>(),
col_to->get_data(), null_map->get_data(),
delta_vec_column->get_data());
} else {
Op::constant_vector(
sources_const->template get_value<FromType2>(), col_to->get_data(),
null_map->get_data(),
*remove_nullable(block.get_by_position(arguments[1]).column));
Op::constant_vector(sources_const->template get_value<FromType2>(),
col_to->get_data(), null_map->get_data(),
*not_nullable_column_ptr_arg1);
}
if (const auto* nullable_col = check_and_get_column<ColumnNullable>(
block.get_by_position(arguments[0]).column.get())) {

View File

@ -590,6 +590,9 @@ true
-- !sql --
2019-08-01T13:21:02.111111
-- !sql --
-1096
-- !sql --
\N \N \N \N
2000-02-29 2000-02-29 2000-02-29 2000-02-29

View File

@ -548,6 +548,8 @@ suite("test_date_function") {
qt_sql """ select minutes_sub(test_time2,1) result from ${tableName}; """
//seconds_sub
qt_sql """ select seconds_sub(test_time2,1) result from ${tableName}; """
//datediff
qt_sql """ select datediff(test_time2, STR_TO_DATE('2022-08-01 00:00:00','%Y-%m-%d')) from ${tableName}; """
// test last_day for vec
sql """ DROP TABLE IF EXISTS ${tableName}; """