diff --git a/be/src/exprs/bloomfilter_predicate.h b/be/src/exprs/bloomfilter_predicate.h index e90f02d4f1..a6b7f83636 100644 --- a/be/src/exprs/bloomfilter_predicate.h +++ b/be/src/exprs/bloomfilter_predicate.h @@ -206,11 +206,12 @@ struct StringFindOp { template struct FixedStringFindOp : public StringFindOp { ALWAYS_INLINE bool find_olap_engine(const BloomFilterAdaptor& bloom_filter, - const void* data) const { - const auto* value = reinterpret_cast(data); - auto end_ptr = value->ptr + value->len - 1; - while (end_ptr > value->ptr && *end_ptr == '\0') --end_ptr; - return bloom_filter.test_bytes(value->ptr, end_ptr - value->ptr + 1); + const void* input_data) const { + const auto* value = reinterpret_cast(input_data); + int64_t size = value->len; + char* data = value->ptr; + while (size > 0 && data[size - 1] == '\0') size--; + return bloom_filter.test_bytes(value->ptr, size); } };