This is an automated email from the ASF dual-hosted git repository. yangzhg 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 4f9b46d Fix String type column using zonemap to filter data maybe core dump (#6939) 4f9b46d is described below commit 4f9b46d40383c2526bfd1fd604cb95063ae65c7c Author: Zhengguo Yang <yangz...@gmail.com> AuthorDate: Wed Oct 27 09:25:38 2021 +0800 Fix String type column using zonemap to filter data maybe core dump (#6939) Fix String type column using zonemap to filter data maybe core dump, because of not allocating memory before parsing string type zonemap --- be/src/olap/wrapper_field.cpp | 11 +++++++++-- be/src/olap/wrapper_field.h | 4 ++++ 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/be/src/olap/wrapper_field.cpp b/be/src/olap/wrapper_field.cpp index 61f5f88..be908a2 100644 --- a/be/src/olap/wrapper_field.cpp +++ b/be/src/olap/wrapper_field.cpp @@ -17,6 +17,8 @@ #include "olap/wrapper_field.h" +#include "olap/row_cursor.h" + namespace doris { const size_t DEFAULT_STRING_LENGTH = 50; @@ -25,8 +27,9 @@ WrapperField* WrapperField::create(const TabletColumn& column, uint32_t len) { bool is_string_type = (column.type() == OLAP_FIELD_TYPE_CHAR || column.type() == OLAP_FIELD_TYPE_VARCHAR || column.type() == OLAP_FIELD_TYPE_HLL || column.type() == OLAP_FIELD_TYPE_OBJECT || - column.type() == OLAP_FIELD_TYPE_STRING); - size_t max_length = column.type() == OLAP_FIELD_TYPE_STRING ? OLAP_STRING_MAX_LENGTH : OLAP_VARCHAR_MAX_LENGTH; + column.type() == OLAP_FIELD_TYPE_STRING); + size_t max_length = column.type() == OLAP_FIELD_TYPE_STRING ? OLAP_STRING_MAX_LENGTH + : OLAP_VARCHAR_MAX_LENGTH; if (is_string_type && len > max_length) { OLAP_LOG_WARNING("length of string parameter is too long[len=%lu, max_len=%lu].", len, max_length); @@ -89,6 +92,10 @@ WrapperField::WrapperField(Field* rep, size_t variable_len, bool is_string_type) _string_content.reset(new char[slice->size]); slice->data = _string_content.get(); } + if (_rep->type() == OLAP_FIELD_TYPE_STRING) { + _long_text_buf = (char*)malloc(RowCursor::DEFAULT_TEXT_LENGTH * sizeof(char)); + rep->set_long_text_buf(&_long_text_buf); + } } WrapperField::WrapperField(Field* rep, const RowCursorCell& row_cursor_cell) diff --git a/be/src/olap/wrapper_field.h b/be/src/olap/wrapper_field.h index c14c019..3d22a7b 100644 --- a/be/src/olap/wrapper_field.h +++ b/be/src/olap/wrapper_field.h @@ -41,6 +41,9 @@ public: virtual ~WrapperField() { delete _rep; delete[] _owned_buf; + if (_long_text_buf) { + delete _long_text_buf; + } } // 将内部的value转成string输出 @@ -103,6 +106,7 @@ private: bool _is_string_type; char* _field_buf = nullptr; char* _owned_buf = nullptr; + char* _long_text_buf = nullptr; //include fixed and variable length and null bytes size_t _length; --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org For additional commands, e-mail: commits-h...@doris.apache.org