This is an automated email from the ASF dual-hosted git repository.

yiguolei pushed a commit to branch branch-4.0
in repository https://gitbox.apache.org/repos/asf/doris.git


The following commit(s) were added to refs/heads/branch-4.0 by this push:
     new 87b8d1d87d9 branch-4.0: [chore](ubsan) fix some ubsan error  #55673 
(#56522)
87b8d1d87d9 is described below

commit 87b8d1d87d93d78592e7dde61cc6fb0bc6a5d65b
Author: github-actions[bot] 
<41898282+github-actions[bot]@users.noreply.github.com>
AuthorDate: Sat Sep 27 21:49:37 2025 +0800

    branch-4.0: [chore](ubsan) fix some ubsan error  #55673 (#56522)
    
    Cherry-picked from #55673
    
    Co-authored-by: Mryange <[email protected]>
---
 be/src/util/counts.h                                  |  7 +++++--
 .../vec/aggregate_functions/aggregate_function_avg.h  | 19 ++++++++++---------
 .../vec/aggregate_functions/aggregate_function_sum.h  | 11 +++++------
 be/src/vec/functions/minus.cpp                        |  2 +-
 be/src/vec/runtime/vdatetime_value.h                  |  9 +++++----
 5 files changed, 26 insertions(+), 22 deletions(-)

diff --git a/be/src/util/counts.h b/be/src/util/counts.h
index 67880268da2..178481e7c90 100644
--- a/be/src/util/counts.h
+++ b/be/src/util/counts.h
@@ -99,7 +99,8 @@ public:
             double u = (_nums.size() - 1) * quantile;
             auto index = static_cast<uint32_t>(u);
             return _nums[index] +
-                   (u - static_cast<double>(index)) * (_nums[index + 1] - 
_nums[index]);
+                   (u - static_cast<double>(index)) * 
(static_cast<double>(_nums[index + 1]) -
+                                                       
static_cast<double>(_nums[index]));
         } else {
             DCHECK(_nums.empty());
             size_t rows = 0;
@@ -124,7 +125,9 @@ public:
             if (quantile == 1) {
                 return second_number;
             }
-            return first_number + (u - static_cast<double>(index)) * 
(second_number - first_number);
+            return first_number +
+                   (u - static_cast<double>(index)) *
+                           (static_cast<double>(second_number) - 
static_cast<double>(first_number));
         }
     }
 
diff --git a/be/src/vec/aggregate_functions/aggregate_function_avg.h 
b/be/src/vec/aggregate_functions/aggregate_function_avg.h
index 16aa67d5108..cf65b41d90f 100644
--- a/be/src/vec/aggregate_functions/aggregate_function_avg.h
+++ b/be/src/vec/aggregate_functions/aggregate_function_avg.h
@@ -143,8 +143,8 @@ public:
     }
 
     template <bool is_add>
-    void update_value(AggregateDataPtr __restrict place, const IColumn** 
columns,
-                      ssize_t row_num) const {
+    NO_SANITIZE_UNDEFINED void update_value(AggregateDataPtr __restrict place,
+                                            const IColumn** columns, ssize_t 
row_num) const {
 #ifdef __clang__
 #pragma clang fp reassociate(on)
 #endif
@@ -177,8 +177,8 @@ public:
         this->data(place).count = 0;
     }
 
-    void merge(AggregateDataPtr __restrict place, ConstAggregateDataPtr rhs,
-               Arena&) const override {
+    NO_SANITIZE_UNDEFINED void merge(AggregateDataPtr __restrict place, 
ConstAggregateDataPtr rhs,
+                                     Arena&) const override {
         if constexpr (is_decimal(T)) {
             this->data(place).sum += this->data(rhs).sum.value;
         } else {
@@ -235,8 +235,9 @@ public:
         }
     }
 
-    void deserialize_and_merge_from_column(AggregateDataPtr __restrict place, 
const IColumn& column,
-                                           Arena&) const override {
+    NO_SANITIZE_UNDEFINED void 
deserialize_and_merge_from_column(AggregateDataPtr __restrict place,
+                                                                 const 
IColumn& column,
+                                                                 Arena&) const 
override {
         auto& col = assert_cast<const ColumnFixedLengthObject&>(column);
         const size_t num_rows = column.size();
         DCHECK(col.size() >= num_rows) << "source column's size should greater 
than num_rows";
@@ -248,9 +249,9 @@ public:
         }
     }
 
-    void deserialize_and_merge_from_column_range(AggregateDataPtr __restrict 
place,
-                                                 const IColumn& column, size_t 
begin, size_t end,
-                                                 Arena&) const override {
+    NO_SANITIZE_UNDEFINED void deserialize_and_merge_from_column_range(
+            AggregateDataPtr __restrict place, const IColumn& column, size_t 
begin, size_t end,
+            Arena&) const override {
         DCHECK(end <= column.size() && begin <= end)
                 << ", begin:" << begin << ", end:" << end << ", 
column.size():" << column.size();
         auto& col = assert_cast<const ColumnFixedLengthObject&>(column);
diff --git a/be/src/vec/aggregate_functions/aggregate_function_sum.h 
b/be/src/vec/aggregate_functions/aggregate_function_sum.h
index 11caab63f47..4151316f447 100644
--- a/be/src/vec/aggregate_functions/aggregate_function_sum.h
+++ b/be/src/vec/aggregate_functions/aggregate_function_sum.h
@@ -214,12 +214,11 @@ public:
 
     bool supported_incremental_mode() const override { return true; }
 
-    void execute_function_with_incremental(int64_t partition_start, int64_t 
partition_end,
-                                           int64_t frame_start, int64_t 
frame_end,
-                                           AggregateDataPtr place, const 
IColumn** columns,
-                                           Arena& arena, bool previous_is_nul, 
bool end_is_nul,
-                                           bool has_null, UInt8* 
use_null_result,
-                                           UInt8* could_use_previous_result) 
const override {
+    NO_SANITIZE_UNDEFINED void execute_function_with_incremental(
+            int64_t partition_start, int64_t partition_end, int64_t 
frame_start, int64_t frame_end,
+            AggregateDataPtr place, const IColumn** columns, Arena& arena, 
bool previous_is_nul,
+            bool end_is_nul, bool has_null, UInt8* use_null_result,
+            UInt8* could_use_previous_result) const override {
         int64_t current_frame_start = std::max<int64_t>(frame_start, 
partition_start);
         int64_t current_frame_end = std::min<int64_t>(frame_end, 
partition_end);
 
diff --git a/be/src/vec/functions/minus.cpp b/be/src/vec/functions/minus.cpp
index 8f0eba7eb66..4fdbda2b96f 100644
--- a/be/src/vec/functions/minus.cpp
+++ b/be/src/vec/functions/minus.cpp
@@ -63,7 +63,7 @@ struct MinusImpl {
     static constexpr auto name = "subtract";
     static constexpr PrimitiveType PType = Type;
     using Arg = typename PrimitiveTypeTraits<Type>::ColumnItemType;
-    static inline Arg apply(Arg a, Arg b) { return a - b; }
+    NO_SANITIZE_UNDEFINED static inline Arg apply(Arg a, Arg b) { return a - 
b; }
 };
 
 void register_function_minus(SimpleFunctionFactory& factory) {
diff --git a/be/src/vec/runtime/vdatetime_value.h 
b/be/src/vec/runtime/vdatetime_value.h
index 5f20b60c9ee..7140c0845ed 100644
--- a/be/src/vec/runtime/vdatetime_value.h
+++ b/be/src/vec/runtime/vdatetime_value.h
@@ -1425,13 +1425,14 @@ public:
 
     int64_t to_int64() const {
         if constexpr (is_datetime) {
-            return (date_v2_value_.year_ * 10000L + date_v2_value_.month_ * 
100 +
+            return (date_v2_value_.year_ * 10000LL + date_v2_value_.month_ * 
100LL +
                     date_v2_value_.day_) *
-                           1000000L +
-                   date_v2_value_.hour_ * 10000 + date_v2_value_.minute_ * 100 
+
+                           1000000LL +
+                   date_v2_value_.hour_ * 10000LL + date_v2_value_.minute_ * 
100LL +
                    date_v2_value_.second_;
         } else {
-            return date_v2_value_.year_ * 10000 + date_v2_value_.month_ * 100 
+ date_v2_value_.day_;
+            return date_v2_value_.year_ * 10000LL + date_v2_value_.month_ * 
100LL +
+                   date_v2_value_.day_;
         }
     }
 


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to