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

morningman 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 c7fefc367f9 [fix](hive) fix block decompressor bug (#45289)
c7fefc367f9 is described below

commit c7fefc367f992ee54ad08c8115d929f5ca4c9ba1
Author: Socrates <suyit...@selectdb.com>
AuthorDate: Fri Dec 13 09:57:41 2024 +0800

    [fix](hive) fix block decompressor bug (#45289)
    
    ### What problem does this PR solve?
    
    Problem Summary:
    In the block decompressor, when it is found that the input data is less
    than 4 bytes (the header size of the large block), should set
    more_input_bytes instead of reporting an error.
---
 be/src/exec/decompressor.cpp | 24 ++++++++++++------------
 1 file changed, 12 insertions(+), 12 deletions(-)

diff --git a/be/src/exec/decompressor.cpp b/be/src/exec/decompressor.cpp
index 9365bb00288..5da2e6acbb9 100644
--- a/be/src/exec/decompressor.cpp
+++ b/be/src/exec/decompressor.cpp
@@ -492,15 +492,15 @@ Status Lz4BlockDecompressor::decompress(uint8_t* input, 
size_t input_len, size_t
     auto* output_ptr = output;
 
     while (input_len > 0) {
-        //if faild ,  fall back to large block begin
-        auto* large_block_input_ptr = input_ptr;
-        auto* large_block_output_ptr = output_ptr;
-
         if (input_len < sizeof(uint32_t)) {
-            return Status::InvalidArgument(strings::Substitute(
-                    "fail to do hadoop-lz4 decompress, input_len=$0", 
input_len));
+            *more_input_bytes = sizeof(uint32_t) - input_len;
+            break;
         }
 
+        //if faild, fall back to large block begin
+        auto* large_block_input_ptr = input_ptr;
+        auto* large_block_output_ptr = output_ptr;
+
         uint32_t remaining_decompressed_large_block_len = 
BigEndian::Load32(input_ptr);
 
         input_ptr += sizeof(uint32_t);
@@ -609,15 +609,15 @@ Status SnappyBlockDecompressor::decompress(uint8_t* 
input, size_t input_len,
     auto* output_ptr = output;
 
     while (input_len > 0) {
-        //if faild ,  fall back to large block begin
-        auto* large_block_input_ptr = input_ptr;
-        auto* large_block_output_ptr = output_ptr;
-
         if (input_len < sizeof(uint32_t)) {
-            return Status::InvalidArgument(strings::Substitute(
-                    "fail to do hadoop-snappy decompress, input_len=$0", 
input_len));
+            *more_input_bytes = sizeof(uint32_t) - input_len;
+            break;
         }
 
+        //if faild, fall back to large block begin
+        auto* large_block_input_ptr = input_ptr;
+        auto* large_block_output_ptr = output_ptr;
+
         uint32_t remaining_decompressed_large_block_len = 
BigEndian::Load32(input_ptr);
 
         input_ptr += sizeof(uint32_t);


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

Reply via email to