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

morningman pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-doris.git


The following commit(s) were added to refs/heads/master by this push:
     new b067bdc  [Bug] fix overflow while convert fixed char to number (#6368)
b067bdc is described below

commit b067bdcdd54e22d70ef79e332816f182b3d5872a
Author: stdpain <34912776+stdp...@users.noreply.github.com>
AuthorDate: Thu Aug 5 14:35:29 2021 +0800

    [Bug] fix overflow while convert fixed char to number (#6368)
    
    because Slice::size was unsigned int64, p >= 0 was always true
---
 be/src/olap/types.h | 18 ++++++++----------
 1 file changed, 8 insertions(+), 10 deletions(-)

diff --git a/be/src/olap/types.h b/be/src/olap/types.h
index a2fba4d..0dc5a9a 100644
--- a/be/src/olap/types.h
+++ b/be/src/olap/types.h
@@ -103,7 +103,9 @@ public:
 
     inline void direct_copy(void* dest, const void* src) const override { 
_direct_copy(dest, src); }
 
-    inline void direct_copy_may_cut(void* dest, const void* src) const 
override { _direct_copy_may_cut(dest, src); }
+    inline void direct_copy_may_cut(void* dest, const void* src) const 
override {
+        _direct_copy_may_cut(dest, src);
+    }
 
     //convert and deep copy value from other type's source
     OLAPStatus convert_from(void* dest, const void* src, const TypeInfo* 
src_type,
@@ -502,9 +504,7 @@ struct BaseFieldtypeTraits : public 
CppTypeTraits<field_type> {
         *reinterpret_cast<CppType*>(dest) = *reinterpret_cast<const 
CppType*>(src);
     }
 
-    static inline void direct_copy_may_cut(void* dest, const void* src) {
-        direct_copy(dest, src);
-    }
+    static inline void direct_copy_may_cut(void* dest, const void* src) { 
direct_copy(dest, src); }
 
     static OLAPStatus convert_from(void* dest, const void* src, const 
TypeInfo* src_type,
                                    MemPool* mem_pool) {
@@ -540,7 +540,7 @@ struct BaseFieldtypeTraits : public 
CppTypeTraits<field_type> {
 static void prepare_char_before_convert(const void* src) {
     Slice* slice = const_cast<Slice*>(reinterpret_cast<const Slice*>(src));
     char* buf = slice->data;
-    auto p = slice->size - 1;
+    int64_t p = slice->size - 1;
     while (p >= 0 && buf[p] == '\0') {
         p--;
     }
@@ -717,9 +717,7 @@ struct FieldTypeTraits<OLAP_FIELD_TYPE_LARGEINT>
         *reinterpret_cast<PackedInt128*>(dest) = *reinterpret_cast<const 
PackedInt128*>(src);
     }
 
-    static inline void direct_copy_may_cut(void* dest, const void* src) {
-        direct_copy(dest, src);
-    }
+    static inline void direct_copy_may_cut(void* dest, const void* src) { 
direct_copy(dest, src); }
 
     static void set_to_max(void* buf) {
         *reinterpret_cast<PackedInt128*>(buf) = ~((int128_t)(1) << 127);
@@ -1028,8 +1026,8 @@ struct FieldTypeTraits<OLAP_FIELD_TYPE_CHAR> : public 
BaseFieldtypeTraits<OLAP_F
         auto l_slice = reinterpret_cast<Slice*>(dest);
         auto r_slice = reinterpret_cast<const Slice*>(src);
 
-        auto min_size = MAX_ZONE_MAP_INDEX_SIZE >= r_slice->size ? 
r_slice->size :
-                MAX_ZONE_MAP_INDEX_SIZE;
+        auto min_size =
+                MAX_ZONE_MAP_INDEX_SIZE >= r_slice->size ? r_slice->size : 
MAX_ZONE_MAP_INDEX_SIZE;
         memory_copy(l_slice->data, r_slice->data, min_size);
         l_slice->size = min_size;
     }

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

Reply via email to