This is an automated email from the ASF dual-hosted git repository.
morningman pushed a commit to branch branch-3.0
in repository https://gitbox.apache.org/repos/asf/doris.git
The following commit(s) were added to refs/heads/branch-3.0 by this push:
new 2292a69cf4f [Fix](parquet-reader) Fix parquet reader crash in
set_dict(). (#41307)
2292a69cf4f is described below
commit 2292a69cf4fc2ae77a32c87c8c8bf1a833c7cedc
Author: Qi Chen <[email protected]>
AuthorDate: Thu Sep 26 17:02:00 2024 +0800
[Fix](parquet-reader) Fix parquet reader crash in set_dict(). (#41307)
## Proposed changes
Backport #40643
---
be/src/vec/exec/format/parquet/byte_array_dict_decoder.cpp | 3 +++
be/src/vec/exec/format/parquet/fix_length_dict_decoder.hpp | 3 +++
2 files changed, 6 insertions(+)
diff --git a/be/src/vec/exec/format/parquet/byte_array_dict_decoder.cpp
b/be/src/vec/exec/format/parquet/byte_array_dict_decoder.cpp
index 8b9532e68d0..7c3d15b7c21 100644
--- a/be/src/vec/exec/format/parquet/byte_array_dict_decoder.cpp
+++ b/be/src/vec/exec/format/parquet/byte_array_dict_decoder.cpp
@@ -32,6 +32,9 @@ namespace doris::vectorized {
Status ByteArrayDictDecoder::set_dict(std::unique_ptr<uint8_t[]>& dict,
int32_t length,
size_t num_values) {
_dict = std::move(dict);
+ if (_dict == nullptr) {
+ return Status::Corruption("Wrong dictionary data for byte array type,
dict is null.");
+ }
_dict_items.reserve(num_values);
uint32_t offset_cursor = 0;
char* dict_item_address = reinterpret_cast<char*>(_dict.get());
diff --git a/be/src/vec/exec/format/parquet/fix_length_dict_decoder.hpp
b/be/src/vec/exec/format/parquet/fix_length_dict_decoder.hpp
index 65e329ae89b..3024405c295 100644
--- a/be/src/vec/exec/format/parquet/fix_length_dict_decoder.hpp
+++ b/be/src/vec/exec/format/parquet/fix_length_dict_decoder.hpp
@@ -107,6 +107,9 @@ protected:
return Status::Corruption("Wrong dictionary data for fixed length
type");
}
_dict = std::move(dict);
+ if (_dict == nullptr) {
+ return Status::Corruption("Wrong dictionary data for byte array
type, dict is null.");
+ }
char* dict_item_address = reinterpret_cast<char*>(_dict.get());
_dict_items.resize(num_values);
_dict_value_to_code.reserve(num_values);
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]