You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@doris.apache.org by yi...@apache.org on 2023/06/30 06:51:03 UTC
[doris] branch master updated: [fix](memory) Fix hash table buf initialize null pointer (#21315)
This is an automated email from the ASF dual-hosted git repository.
yiguolei pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/doris.git
The following commit(s) were added to refs/heads/master by this push:
new 25b5bab22d [fix](memory) Fix hash table buf initialize null pointer (#21315)
25b5bab22d is described below
commit 25b5bab22dfbb174b673759877c003eee34ed889
Author: Xinyi Zou <zo...@gmail.com>
AuthorDate: Fri Jun 30 14:50:53 2023 +0800
[fix](memory) Fix hash table buf initialize null pointer (#21315)
When compiling FunctionArrayEnumerateUniq::_execute_by_hash, AllocatorWithStackMemory::free(buf)
will be called when delete HashMapContainer. the gcc compiler will think that size > N and buf is not heap memory,
and report an error ' void free(void*)' called on unallocated object 'hash_map'
This only fails on doris docker + gcc 11.1, no problem on doris docker + clang 16.0.1,
no problem on ldb_toolchanin gcc 11.1 and clang 16.0.1.
---
be/src/vec/common/hash_table/hash_table.h | 4 ++--
.../vec/functions/array/function_array_enumerate_uniq.cpp | 14 ++++++++++++++
2 files changed, 16 insertions(+), 2 deletions(-)
diff --git a/be/src/vec/common/hash_table/hash_table.h b/be/src/vec/common/hash_table/hash_table.h
index 7ee35af64c..0b9d6bc3e1 100644
--- a/be/src/vec/common/hash_table/hash_table.h
+++ b/be/src/vec/common/hash_table/hash_table.h
@@ -445,8 +445,8 @@ protected:
using Self = HashTable;
using cell_type = Cell;
- size_t m_size = 0; /// Amount of elements
- Cell* buf; /// A piece of memory for all elements except the element with zero key.
+ size_t m_size = 0; /// Amount of elements
+ Cell* buf {nullptr}; /// A piece of memory for all elements except the element with zero key.
Grower grower;
int64_t _resize_timer_ns;
diff --git a/be/src/vec/functions/array/function_array_enumerate_uniq.cpp b/be/src/vec/functions/array/function_array_enumerate_uniq.cpp
index d40185f903..e3b8aa4bf6 100644
--- a/be/src/vec/functions/array/function_array_enumerate_uniq.cpp
+++ b/be/src/vec/functions/array/function_array_enumerate_uniq.cpp
@@ -105,6 +105,16 @@ public:
return return_type;
}
+// When compiling `FunctionArrayEnumerateUniq::_execute_by_hash`, `AllocatorWithStackMemory::free(buf)`
+// will be called when `delete HashMapContainer`. the gcc compiler will think that `size > N` and `buf` is not heap memory,
+// and report an error `' void free(void*)' called on unallocated object 'hash_map'`
+// This only fails on doris docker + gcc 11.1, no problem on doris docker + clang 16.0.1,
+// no problem on ldb_toolchanin gcc 11.1 and clang 16.0.1.
+#ifdef __GNUC__
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wfree-nonheap-object"
+#endif // __GNUC__
+
Status execute_impl(FunctionContext* context, Block& block, const ColumnNumbers& arguments,
size_t result, size_t input_rows_count) override {
ColumnRawPtrs data_columns(arguments.size());
@@ -285,6 +295,10 @@ private:
}
};
+#ifdef __GNUC__
+#pragma GCC diagnostic pop
+#endif // __GNUC__
+
void register_function_array_enumerate_uniq(SimpleFunctionFactory& factory) {
factory.register_function<FunctionArrayEnumerateUniq>();
}
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@doris.apache.org
For additional commands, e-mail: commits-help@doris.apache.org