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

zhaoc 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 b576e54  [ASAN] Fix some address problems detected by ASAN (#3495)
b576e54 is described below

commit b576e54fe6479babdb52d8af639aa15d8e4f48c0
Author: Yingchun Lai <405403...@qq.com>
AuthorDate: Mon May 11 10:30:45 2020 +0800

    [ASAN] Fix some address problems detected by ASAN (#3495)
    
    LSAN detected errors have been fixed by a prior pathch (#3326), but
    there are still some ASAN detected errors.
    This patch try to fix these errors to make Doris BE more robustness.
    And then we can add CI run in LSAN/ASAN mode to detect memory errors
    as early as possible.
---
 be/src/http/ev_http_server.cpp                            |  1 +
 be/src/runtime/runtime_state.cpp                          |  3 ++-
 be/src/runtime/runtime_state.h                            |  4 ++--
 be/src/util/debug/leakcheck_disabler.h                    |  2 +-
 be/src/util/dynamic_util.cpp                              |  2 +-
 be/src/util/mem_util.hpp                                  |  3 +++
 be/src/util/path_util.cpp                                 |  8 ++++----
 be/src/util/url_coding.cpp                                |  3 ++-
 be/test/agent/utils_test.cpp                              |  6 +++---
 be/test/exec/broker_scan_node_test.cpp                    |  2 +-
 be/test/exec/tablet_sink_test.cpp                         |  2 +-
 be/test/exprs/timestamp_functions_test.cpp                |  8 +++++---
 be/test/geo/wkt_parse_test.cpp                            |  1 +
 be/test/olap/in_list_predicate_test.cpp                   |  8 ++++----
 be/test/olap/key_coder_test.cpp                           | 12 ++++++++----
 be/test/olap/rowset/rowset_converter_test.cpp             |  5 ++++-
 be/test/olap/rowset/segment_v2/binary_dict_page_test.cpp  |  2 +-
 .../olap/rowset/segment_v2/binary_prefix_page_test.cpp    | 15 +++++++--------
 be/test/olap/rowset/segment_v2/bitmap_index_test.cpp      |  8 ++++----
 be/test/olap/schema_change_test.cpp                       |  2 +-
 be/test/plugin/plugin_zip_test.cpp                        | 10 ++++------
 be/test/runtime/memory_scratch_sink_test.cpp              |  1 -
 be/test/util/aes_util_test.cpp                            | 12 ++++++------
 be/test/util/zip_util_test.cpp                            |  3 ++-
 24 files changed, 68 insertions(+), 55 deletions(-)

diff --git a/be/src/http/ev_http_server.cpp b/be/src/http/ev_http_server.cpp
index af96205..48013d4 100644
--- a/be/src/http/ev_http_server.cpp
+++ b/be/src/http/ev_http_server.cpp
@@ -124,6 +124,7 @@ Status EvHttpServer::start() {
 }
 
 void EvHttpServer::stop() {
+    close(_server_fd);
 }
 
 void EvHttpServer::join() {
diff --git a/be/src/runtime/runtime_state.cpp b/be/src/runtime/runtime_state.cpp
index b8e450e..44488e3 100644
--- a/be/src/runtime/runtime_state.cpp
+++ b/be/src/runtime/runtime_state.cpp
@@ -105,6 +105,7 @@ RuntimeState::RuntimeState(const TQueryGlobals& 
query_globals)
       _data_stream_recvrs_pool(new ObjectPool()),
       _unreported_error_idx(0),
       _profile(_obj_pool.get(), "<unnamed>"),
+      _is_cancelled(false),
       _per_fragment_instance_idx(0) {
     _query_options.batch_size = DEFAULT_BATCH_SIZE;
     if (query_globals.__isset.time_zone) {
@@ -151,7 +152,7 @@ RuntimeState::~RuntimeState() {
         _buffer_reservation->Close();
     }
 
-    if (_exec_env != nullptr) {
+    if (_exec_env != nullptr && _exec_env->thread_mgr() != nullptr) {
         _exec_env->thread_mgr()->unregister_pool(_resource_pool);
     }
 
diff --git a/be/src/runtime/runtime_state.h b/be/src/runtime/runtime_state.h
index 5c9fe6b..876bcc3 100644
--- a/be/src/runtime/runtime_state.h
+++ b/be/src/runtime/runtime_state.h
@@ -528,7 +528,7 @@ private:
     TUniqueId _query_id;
     TUniqueId _fragment_instance_id;
     TQueryOptions _query_options;
-    ExecEnv* _exec_env;
+    ExecEnv* _exec_env = nullptr;
 
     // Thread resource management object for this fragment's execution.  The 
runtime
     // state is responsible for returning this pool to the thread mgr.
@@ -599,7 +599,7 @@ private:
     int64_t _normal_row_number;
     int64_t _error_row_number;
     std::string _error_log_file_path;
-    std::ofstream* _error_log_file; // error file path, absolute path
+    std::ofstream* _error_log_file = nullptr; // error file path, absolute path
     std::unique_ptr<LoadErrorHub> _error_hub;
     std::vector<TTabletCommitInfo> _tablet_commit_infos;
 
diff --git a/be/src/util/debug/leakcheck_disabler.h 
b/be/src/util/debug/leakcheck_disabler.h
index ccb682e..868221f 100644
--- a/be/src/util/debug/leakcheck_disabler.h
+++ b/be/src/util/debug/leakcheck_disabler.h
@@ -31,7 +31,7 @@ class ScopedLeakCheckDisabler {
 
  private:
 
-#ifdef LEAK_SANITIZER
+#if defined(ADDRESS_SANITIZER) || defined(LEAK_SANITIZER)
   ScopedLSANDisabler lsan_disabler;
 #endif
 
diff --git a/be/src/util/dynamic_util.cpp b/be/src/util/dynamic_util.cpp
index a8d8ace..ad40b5a 100644
--- a/be/src/util/dynamic_util.cpp
+++ b/be/src/util/dynamic_util.cpp
@@ -52,7 +52,7 @@ Status dynamic_open(const char* library, void** handle) {
 void dynamic_close(void* handle) {
 // There is an issue of LSAN can't deal well with dlclose(), so we disable 
LSAN here, more details:
 // https://github.com/google/sanitizers/issues/89
-#ifndef LEAK_SANITIZER
+#if !defined(ADDRESS_SANITIZER) && !defined(LEAK_SANITIZER)
    dlclose(handle);
 #endif
 }
diff --git a/be/src/util/mem_util.hpp b/be/src/util/mem_util.hpp
index 05b131c..473c8a3 100644
--- a/be/src/util/mem_util.hpp
+++ b/be/src/util/mem_util.hpp
@@ -50,6 +50,8 @@ template<> inline void fixed_size_memory_copy<8>(void* dst, 
const void* src) {
 }
 
 inline void memory_copy(void* dst, const void* src, size_t size) {
+// Function fixed_size_memory_copy will report a stack-use-after-scope error 
in ASAN mode.
+#if !defined(ADDRESS_SANITIZER)
     static const void* addrs[] = {
         &&B0, &&B1, &&B2, &&B3, &&B4, &&B5, &&B6, 
         &&B7, &&B8, &&B9, &&B10, &&B11, &&B12, &&B13,
@@ -615,6 +617,7 @@ B254:
 B255:
         return fixed_size_memory_copy<255>(dst, src);
     }
+#endif
 
     memcpy(dst, src, size);
     return;
diff --git a/be/src/util/path_util.cpp b/be/src/util/path_util.cpp
index 33a8535..5f38f1c 100644
--- a/be/src/util/path_util.cpp
+++ b/be/src/util/path_util.cpp
@@ -71,13 +71,13 @@ vector<string> split_path(const string& path) {
 }
 
 string dir_name(const string& path) {
-    std::unique_ptr<char[]> path_copy(strdup(path.c_str()));
-    return dirname(path_copy.get());
+    std::vector<char> path_copy(path.c_str(), path.c_str() + path.size() + 1);
+    return dirname(&path_copy[0]);
 }
 
 string base_name(const string& path) {
-    std::unique_ptr<char[]> path_copy(strdup(path.c_str()));
-    return basename(path_copy.get());
+    std::vector<char> path_copy(path.c_str(), path.c_str() + path.size() + 1);
+    return basename(&path_copy[0]);
 }
 
 string file_extension(const string& path) {
diff --git a/be/src/util/url_coding.cpp b/be/src/util/url_coding.cpp
index f939066..08a671f 100644
--- a/be/src/util/url_coding.cpp
+++ b/be/src/util/url_coding.cpp
@@ -91,7 +91,8 @@ bool url_decode(const std::string& in, std::string* out) {
 static void encode_base64_internal(const std::string& in, std::string* out,
                                    const unsigned char* basis, bool padding) {
     size_t len = in.size();
-    std::unique_ptr<unsigned char[]> buf(new unsigned char[len]);
+    // Every 3 source bytes will be encoded into 4 bytes.
+    std::unique_ptr<unsigned char[]> buf(new unsigned char[(((len + 2) / 3) * 
4)]);
     const unsigned char* s = reinterpret_cast<const unsigned char*>(in.data());
     unsigned char* d = buf.get();
     while (len > 2) {
diff --git a/be/test/agent/utils_test.cpp b/be/test/agent/utils_test.cpp
index b2dfd5b..36a0ab3 100644
--- a/be/test/agent/utils_test.cpp
+++ b/be/test/agent/utils_test.cpp
@@ -30,9 +30,9 @@ using std::string;
 namespace doris {
 
 TEST(AgentUtilsTest, Test) {
-    const char* host_name = BackendOptions::get_localhost().c_str();
-    int cnt = std::count(host_name, host_name + 17, '.');
-    EXPECT_EQ(3, cnt);
+    std::string host_name = BackendOptions::get_localhost();
+    int cnt = std::count(host_name.begin(), host_name.end(), '.');
+    ASSERT_EQ(3, cnt);
 }
 
 }  // namespace doris
diff --git a/be/test/exec/broker_scan_node_test.cpp 
b/be/test/exec/broker_scan_node_test.cpp
index 44f302b..d9804cf 100644
--- a/be/test/exec/broker_scan_node_test.cpp
+++ b/be/test/exec/broker_scan_node_test.cpp
@@ -314,7 +314,7 @@ void BrokerScanNodeTest::init_desc_table() {
         // TTupleDescriptor source
         TTupleDescriptor t_tuple_desc;
         t_tuple_desc.id = 1;
-        t_tuple_desc.byteSize = 60;
+        t_tuple_desc.byteSize = 64;
         t_tuple_desc.numNullBytes = 0;
         t_tuple_desc.tableId = 0;
         t_tuple_desc.__isset.tableId = true;
diff --git a/be/test/exec/tablet_sink_test.cpp 
b/be/test/exec/tablet_sink_test.cpp
index 0f563b3..d0153ad 100644
--- a/be/test/exec/tablet_sink_test.cpp
+++ b/be/test/exec/tablet_sink_test.cpp
@@ -443,7 +443,7 @@ TEST_F(OlapTableSinkTest, normal) {
         *reinterpret_cast<int*>(tuple->get_slot(4)) = 14;
         *reinterpret_cast<int64_t*>(tuple->get_slot(8)) = 50;
         StringValue* str_val = 
reinterpret_cast<StringValue*>(tuple->get_slot(16));
-        str_val->ptr = 
reinterpret_cast<char*>(batch.tuple_data_pool()->allocate(10));
+        str_val->ptr = 
reinterpret_cast<char*>(batch.tuple_data_pool()->allocate(16));
         str_val->len = 15;
         memcpy(str_val->ptr, "abcde1234567890", str_val->len);
 
diff --git a/be/test/exprs/timestamp_functions_test.cpp 
b/be/test/exprs/timestamp_functions_test.cpp
index 7ca2ecb..ffbb697 100644
--- a/be/test/exprs/timestamp_functions_test.cpp
+++ b/be/test/exprs/timestamp_functions_test.cpp
@@ -47,14 +47,16 @@ public:
         utils = new FunctionUtils(state);
         ctx = utils->get_fn_ctx();
     }
+
     void TearDown() {
         delete state;
         delete utils;
     }
+
 private:
-    RuntimeState* state;
-    FunctionUtils* utils;
-    FunctionContext* ctx;
+    RuntimeState* state = nullptr;
+    FunctionUtils* utils = nullptr;
+    FunctionContext* ctx = nullptr;
 };
 
 TEST_F(TimestampFunctionsTest, day_of_week_test) {
diff --git a/be/test/geo/wkt_parse_test.cpp b/be/test/geo/wkt_parse_test.cpp
index de5d83b..4285e78 100644
--- a/be/test/geo/wkt_parse_test.cpp
+++ b/be/test/geo/wkt_parse_test.cpp
@@ -39,6 +39,7 @@ TEST_F(WktParseTest, normal) {
     ASSERT_EQ(GEO_PARSE_OK, status);
     ASSERT_NE(nullptr, shape);
     LOG(INFO) << "parse result: " << shape->to_string();
+    delete shape;
 }
 
 TEST_F(WktParseTest, invalid_wkt) {
diff --git a/be/test/olap/in_list_predicate_test.cpp 
b/be/test/olap/in_list_predicate_test.cpp
index f1809b2..c293d74 100644
--- a/be/test/olap/in_list_predicate_test.cpp
+++ b/be/test/olap/in_list_predicate_test.cpp
@@ -441,8 +441,8 @@ TEST_F(TestInListPredicate, CHAR_COLUMN) {
     StringValue* col_data = 
reinterpret_cast<StringValue*>(_mem_pool->allocate(size * sizeof(StringValue)));
     col_vector->set_col_data(col_data);
     
-    char* string_buffer = reinterpret_cast<char*>(_mem_pool->allocate(50));
-    memset(string_buffer, 0, 50);
+    char* string_buffer = reinterpret_cast<char*>(_mem_pool->allocate(60));
+    memset(string_buffer, 0, 60);
     for (int i = 0; i < size; ++i) {
         for (int j = 0; j <= 5; ++j) {
             string_buffer[j] = 'a' + i;
@@ -484,8 +484,8 @@ TEST_F(TestInListPredicate, CHAR_COLUMN) {
     bool* is_null = reinterpret_cast<bool*>(_mem_pool->allocate(size));  
     memset(is_null, 0, size);
     col_vector->set_is_null(is_null);
-    string_buffer = reinterpret_cast<char*>(_mem_pool->allocate(50));
-    memset(string_buffer, 0, 50);
+    string_buffer = reinterpret_cast<char*>(_mem_pool->allocate(60));
+    memset(string_buffer, 0, 60);
     for (int i = 0; i < size; ++i) {
         if (i % 2 == 0) {
             is_null[i] = true;
diff --git a/be/test/olap/key_coder_test.cpp b/be/test/olap/key_coder_test.cpp
index 6840e25..c34287f 100644
--- a/be/test/olap/key_coder_test.cpp
+++ b/be/test/olap/key_coder_test.cpp
@@ -233,7 +233,8 @@ TEST_F(KeyCoderTest, test_char) {
         auto st = key_coder->decode_ascending(&encoded_key, 10, 
(uint8_t*)&check_slice, &_pool);
         ASSERT_TRUE(st.ok());
 
-        ASSERT_STREQ("1234567890", check_slice.data);
+        ASSERT_EQ(10, check_slice.size);
+        ASSERT_EQ(strncmp("1234567890", check_slice.data, 10), 0);
     }
 
     {
@@ -245,7 +246,8 @@ TEST_F(KeyCoderTest, test_char) {
         auto st = key_coder->decode_ascending(&encoded_key, 5, 
(uint8_t*)&check_slice, &_pool);
         ASSERT_TRUE(st.ok());
 
-        ASSERT_STREQ("12345", check_slice.data);
+        ASSERT_EQ(5, check_slice.size);
+        ASSERT_EQ(strncmp("12345", check_slice.data, 5), 0);
     }
 }
 
@@ -264,7 +266,8 @@ TEST_F(KeyCoderTest, test_varchar) {
         auto st = key_coder->decode_ascending(&encoded_key, 15, 
(uint8_t*)&check_slice, &_pool);
         ASSERT_TRUE(st.ok());
 
-        ASSERT_STREQ("1234567890", check_slice.data);
+        ASSERT_EQ(10, check_slice.size);
+        ASSERT_EQ(strncmp("1234567890", check_slice.data, 10), 0);
     }
 
     {
@@ -276,7 +279,8 @@ TEST_F(KeyCoderTest, test_varchar) {
         auto st = key_coder->decode_ascending(&encoded_key, 5, 
(uint8_t*)&check_slice, &_pool);
         ASSERT_TRUE(st.ok());
 
-        ASSERT_STREQ("12345", check_slice.data);
+        ASSERT_EQ(5, check_slice.size);
+        ASSERT_EQ(strncmp("12345", check_slice.data, 5), 0);
     }
 }
 
diff --git a/be/test/olap/rowset/rowset_converter_test.cpp 
b/be/test/olap/rowset/rowset_converter_test.cpp
index daf7577..b7a34e1 100644
--- a/be/test/olap/rowset/rowset_converter_test.cpp
+++ b/be/test/olap/rowset/rowset_converter_test.cpp
@@ -207,10 +207,13 @@ void RowsetConverterTest::process(RowsetTypePB src_type, 
RowsetTypePB dst_type)
     OLAPStatus res = row.init(tablet_schema);
     ASSERT_EQ(OLAP_SUCCESS, res);
 
+    std::vector<std::string> test_data;
     for (int i = 0; i < 1024; ++i) {
+        test_data.push_back("well" + std::to_string(i));
+
         int32_t field_0 = i;
         row.set_field_content(0, reinterpret_cast<char*>(&field_0), 
_mem_pool.get());
-        Slice field_1("well" + std::to_string(i));
+        Slice field_1(test_data[i]);
         row.set_field_content(1, reinterpret_cast<char*>(&field_1), 
_mem_pool.get());
         int32_t field_2 = 10000 + i;
         row.set_field_content(2, reinterpret_cast<char*>(&field_2), 
_mem_pool.get());
diff --git a/be/test/olap/rowset/segment_v2/binary_dict_page_test.cpp 
b/be/test/olap/rowset/segment_v2/binary_dict_page_test.cpp
index 1cb1eaa..1313061 100644
--- a/be/test/olap/rowset/segment_v2/binary_dict_page_test.cpp
+++ b/be/test/olap/rowset/segment_v2/binary_dict_page_test.cpp
@@ -217,7 +217,7 @@ TEST_F(BinaryDictPageTest, TestEncodingRatio) {
         src_strings.emplace_back(line);
     }
     for (int i = 0; i < 10000; ++i) {
-        for (auto src_string : src_strings) {
+        for (const auto& src_string : src_strings) {
             slices.push_back(src_string);
         }
     }
diff --git a/be/test/olap/rowset/segment_v2/binary_prefix_page_test.cpp 
b/be/test/olap/rowset/segment_v2/binary_prefix_page_test.cpp
index 6d85ac5..f7fe926 100644
--- a/be/test/olap/rowset/segment_v2/binary_prefix_page_test.cpp
+++ b/be/test/olap/rowset/segment_v2/binary_prefix_page_test.cpp
@@ -37,12 +37,11 @@ class BinaryPrefixPageTest : public testing::Test {
     void test_encode_and_decode() {
         std::vector<std::string> test_data;
         for (int i = 1000; i < 1038; ++i) {
-            test_data.push_back(std::to_string(i));
+            test_data.emplace_back(std::to_string(i));
         }
         std::vector<Slice> slices;
-        for (int i = 0; i < test_data.size(); ++i) {
-            Slice s(test_data[i]);
-            slices.emplace_back(s);
+        for (const auto& data : test_data) {
+            slices.emplace_back(Slice(data));
         }
         // encode
         PageBuilderOptions options;
@@ -101,22 +100,22 @@ class BinaryPrefixPageTest : public testing::Test {
             ASSERT_EQ(std::to_string(i), values[i - 1015].to_string());
         }
 
-        Slice v1 = Slice(std::to_string(1039));
+        Slice v1 = Slice("1039");
         bool exact_match;
         ret = page_decoder->seek_at_or_after_value(&v1, &exact_match);
         ASSERT_TRUE(ret.is_not_found());
 
-        Slice v2 = Slice(std::to_string(1000));
+        Slice v2 = Slice("1000");
         ret = page_decoder->seek_at_or_after_value(&v2, &exact_match);
         ASSERT_TRUE(ret.ok());
         ASSERT_TRUE(exact_match);
 
-        Slice v3 = Slice(std::to_string(1037));
+        Slice v3 = Slice("1037");
         ret = page_decoder->seek_at_or_after_value(&v3, &exact_match);
         ASSERT_TRUE(ret.ok());
         ASSERT_TRUE(exact_match);
 
-        Slice v4 = Slice(std::to_string(100));
+        Slice v4 = Slice("100");
         ret = page_decoder->seek_at_or_after_value(&v4, &exact_match);
         ASSERT_TRUE(ret.ok());
         ASSERT_TRUE(!exact_match);
diff --git a/be/test/olap/rowset/segment_v2/bitmap_index_test.cpp 
b/be/test/olap/rowset/segment_v2/bitmap_index_test.cpp
index d83bf59..4874af6 100644
--- a/be/test/olap/rowset/segment_v2/bitmap_index_test.cpp
+++ b/be/test/olap/rowset/segment_v2/bitmap_index_test.cpp
@@ -136,7 +136,7 @@ TEST_F(BitmapIndexTest, test_invert) {
         delete reader;
         delete iter;
     }
-    delete val;
+    delete[] val;
 }
 
 TEST_F(BitmapIndexTest, test_invert_2) {
@@ -174,7 +174,7 @@ TEST_F(BitmapIndexTest, test_invert_2) {
         delete reader;
         delete iter;
     }
-    delete val;
+    delete[] val;
 }
 
 TEST_F(BitmapIndexTest, test_multi_pages) {
@@ -206,7 +206,7 @@ TEST_F(BitmapIndexTest, test_multi_pages) {
         delete reader;
         delete iter;
     }
-    delete val;
+    delete[] val;
 }
 
 TEST_F(BitmapIndexTest, test_null) {
@@ -231,7 +231,7 @@ TEST_F(BitmapIndexTest, test_null) {
         delete reader;
         delete iter;
     }
-    delete val;
+    delete[] val;
 }
 
 }
diff --git a/be/test/olap/schema_change_test.cpp 
b/be/test/olap/schema_change_test.cpp
index 897e441..389099e 100644
--- a/be/test/olap/schema_change_test.cpp
+++ b/be/test/olap/schema_change_test.cpp
@@ -318,7 +318,7 @@ public:
     std::vector<StorageByteBuffer*> _second_buffers;
     std::vector<StorageByteBuffer*> _dictionary_buffers;
     std::vector<StorageByteBuffer*> _length_buffers;
-    StorageByteBuffer* _shared_buffer;
+    StorageByteBuffer* _shared_buffer = nullptr;
     std::map<StreamName, ReadOnlyFileStream *> _map_in_streams;
     FileHandler helper;
     OlapReaderStatistics _stats;
diff --git a/be/test/plugin/plugin_zip_test.cpp 
b/be/test/plugin/plugin_zip_test.cpp
index 8db00c0..25f1a49 100755
--- a/be/test/plugin/plugin_zip_test.cpp
+++ b/be/test/plugin/plugin_zip_test.cpp
@@ -80,7 +80,6 @@ public:
         _server->start();
         
         std::cout << "the path: " << _path << std::endl;
-
     }
 
     ~PluginZipTest() {
@@ -122,14 +121,10 @@ TEST_F(PluginZipTest, http_normal) {
 
     //    ASSERT_TRUE(zip.extract(_path + "/plugin_test/target/", 
"test").ok());
     Status st = (zip.extract(_path + "/plugin_test/target/", "test"));
-
-    std::cout << st.to_string() << std::endl;
-    
-    
+    ASSERT_TRUE(st.ok()) << st.to_string();
     ASSERT_TRUE(FileUtils::check_exist(_path + "/plugin_test/target/test"));
     ASSERT_TRUE(FileUtils::check_exist(_path + 
"/plugin_test/target/test/test.txt"));
 
-
     std::unique_ptr<RandomAccessFile> file;
     Env::Default()->new_random_access_file(_path + 
"/plugin_test/target/test/test.txt", &file);
 
@@ -150,6 +145,9 @@ TEST_F(PluginZipTest, http_normal) {
 }
 
 TEST_F(PluginZipTest, already_install) {
+    // This test case will finish very soon, sleep 1 second to ensure that 
EvHttpServer worker has started
+    // before this unit test case finished, or there may cause an ASAN error.
+    sleep(1);
     FileUtils::remove_all(_path + "/plugin_test/target");
 
     PluginZip zip("http://127.0.0.1:29191/test.zip";);
diff --git a/be/test/runtime/memory_scratch_sink_test.cpp 
b/be/test/runtime/memory_scratch_sink_test.cpp
index 293e234..4a7df19 100644
--- a/be/test/runtime/memory_scratch_sink_test.cpp
+++ b/be/test/runtime/memory_scratch_sink_test.cpp
@@ -67,7 +67,6 @@ public:
 
     ~MemoryScratchSinkTest() {
         delete _state;
-        delete _row_desc;
         delete _mem_tracker;
         delete _exec_env->_result_queue_mgr;
         delete _exec_env->_thread_mgr;
diff --git a/be/test/util/aes_util_test.cpp b/be/test/util/aes_util_test.cpp
index 46c5deb..979d886 100644
--- a/be/test/util/aes_util_test.cpp
+++ b/be/test/util/aes_util_test.cpp
@@ -37,12 +37,12 @@ private:
 
 void do_aes_test(const std::string& source, const std::string& key) {
     int cipher_len = source.length() + 16;
-    std::unique_ptr<unsigned char> dest(new unsigned char[cipher_len]);
+    std::unique_ptr<unsigned char[]> dest(new unsigned char[cipher_len]);
     int ret_code = AesUtil::encrypt(AES_128_ECB, (unsigned char 
*)source.c_str(), source.length(),
             (unsigned char *)key.c_str(), key.length(), NULL, true, 
dest.get());
     ASSERT_TRUE(ret_code > 0);
     int encrypted_length = ret_code;
-    std::unique_ptr<char> decrypted(new char[source.length()]);
+    std::unique_ptr<char[]> decrypted(new char[cipher_len]);
     ret_code = AesUtil::decrypt(AES_128_ECB, dest.get(), encrypted_length, 
             (unsigned char *)key.c_str(), key.length(), NULL, true, (unsigned 
char *)decrypted.get());
     ASSERT_TRUE(ret_code > 0);
@@ -63,18 +63,18 @@ TEST_F(AesUtilTest, aes_test_by_case) {
     std::string case_2 = "nP/db4j4yqMjXv/pItaOVA=="; // base64 for encrypted 
"doris test"
     std::string source_2 = "doris test";
 
-    std::unique_ptr<char> encrypt_1(new char[case_1.length()]);
+    std::unique_ptr<char[]> encrypt_1(new char[case_1.length()]);
     int length_1 = base64_decode2(case_1.c_str(), case_1.length(), 
encrypt_1.get());
-    std::unique_ptr<char> decrypted_1(new char[case_1.length()]);
+    std::unique_ptr<char[]> decrypted_1(new char[case_1.length()]);
     int ret_code = AesUtil::decrypt(AES_128_ECB, (unsigned char 
*)encrypt_1.get(), length_1,
             (unsigned char *)_aes_key.c_str(), _aes_key.length(), NULL, true, 
(unsigned char *)decrypted_1.get());
     ASSERT_TRUE(ret_code > 0);
     std::string decrypted_content_1(decrypted_1.get(), ret_code);
     ASSERT_EQ(source_1, decrypted_content_1);
 
-    std::unique_ptr<char> encrypt_2(new char[case_2.length()]);
+    std::unique_ptr<char[]> encrypt_2(new char[case_2.length()]);
     int length_2 = base64_decode2(case_2.c_str(), case_2.length(), 
encrypt_2.get());
-    std::unique_ptr<char> decrypted_2(new char[case_2.length()]);
+    std::unique_ptr<char[]> decrypted_2(new char[case_2.length()]);
     ret_code = AesUtil::decrypt(AES_128_ECB, (unsigned char *)encrypt_2.get(), 
length_2,
             (unsigned char *)_aes_key.c_str(), _aes_key.length(), NULL, true, 
(unsigned char *)decrypted_2.get());
     ASSERT_TRUE(ret_code > 0);
diff --git a/be/test/util/zip_util_test.cpp b/be/test/util/zip_util_test.cpp
index 4a0a76f..0cab95f 100644
--- a/be/test/util/zip_util_test.cpp
+++ b/be/test/util/zip_util_test.cpp
@@ -39,7 +39,8 @@ TEST(ZipUtilTest, basic) {
     FileUtils::remove_all(path + "/test_data/target");
 
     ZipFile zf = ZipFile(path + "/test_data/zip_normal.zip");
-    ASSERT_TRUE(zf.extract(path + "/test_data", "target").ok());
+    auto st = zf.extract(path + "/test_data", "target");
+    ASSERT_TRUE(st.ok()) << st.to_string();
     ASSERT_TRUE(FileUtils::check_exist(path + 
"/test_data/target/zip_normal_data"));
     ASSERT_FALSE(FileUtils::is_dir(path + 
"/test_data/target/zip_normal_data"));
 


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

Reply via email to