You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@kudu.apache.org by ad...@apache.org on 2019/10/31 23:24:21 UTC

[kudu] branch master updated: [compression] Use new lz4 API

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

adar pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/kudu.git


The following commit(s) were added to refs/heads/master by this push:
     new 8166dd7  [compression] Use new lz4 API
8166dd7 is described below

commit 8166dd7100b99e3ea5d6ae3502b4f43c4ecd560e
Author: lingbin <li...@gmail.com>
AuthorDate: Wed Oct 30 21:23:18 2019 +0800

    [compression] Use new lz4 API
    
    In the new version (v1.9.1) of lz4, `LZ4_decompress_fast()` is deprecated
    and unsafe. It is recommended to use `LZ4_decompress_safe()`
    
    The documentation in lz4.h is as follows:
    
    /*! LZ4_decompress_fast() : **unsafe!**
     *  These functions used to be faster than LZ4_decompress_safe(),
     *  but it has changed, and they are now slower than LZ4_decompress_safe().
     *  This is because LZ4_decompress_fast() doesn't know the input size,
     *  and therefore must progress more cautiously in the input buffer to not read beyond the end of
        block.
     *  On top of that `LZ4_decompress_fast()` is not protected vs malformed or malicious inputs,
        making it a security liability.
     *  As a consequence, LZ4_decompress_fast() is strongly discouraged, and deprecated.
     */
    
    Change-Id: Ib343fda7fff1d14ee7bc551be3ac87b068504359
    Reviewed-on: http://gerrit.cloudera.org:8080/14587
    Tested-by: Kudu Jenkins
    Reviewed-by: Adar Dembo <ad...@cloudera.com>
---
 src/kudu/util/compression/compression_codec.cc | 15 ++++++++-------
 1 file changed, 8 insertions(+), 7 deletions(-)

diff --git a/src/kudu/util/compression/compression_codec.cc b/src/kudu/util/compression/compression_codec.cc
index a2231b6..b927d48 100644
--- a/src/kudu/util/compression/compression_codec.cc
+++ b/src/kudu/util/compression/compression_codec.cc
@@ -134,7 +134,7 @@ class SnappyCodec : public CompressionCodec {
 
   Status Uncompress(const Slice& compressed,
                     uint8_t *uncompressed,
-                    size_t uncompressed_length) const OVERRIDE {
+                    size_t /*uncompressed_length*/) const OVERRIDE {
     bool success = snappy::RawUncompress(reinterpret_cast<const char *>(compressed.data()),
                                          compressed.size(), reinterpret_cast<char *>(uncompressed));
     return success ? Status::OK() : Status::Corruption("unable to uncompress the buffer");
@@ -157,9 +157,9 @@ class Lz4Codec : public CompressionCodec {
 
   Status Compress(const Slice& input,
                   uint8_t *compressed, size_t *compressed_length) const OVERRIDE {
-    int n = LZ4_compress(reinterpret_cast<const char *>(input.data()),
-                         reinterpret_cast<char *>(compressed), input.size());
-    *compressed_length = n;
+    *compressed_length = LZ4_compress(reinterpret_cast<const char *>(input.data()),
+                                      reinterpret_cast<char *>(compressed),
+                                      input.size());
     return Status::OK();
   }
 
@@ -178,9 +178,10 @@ class Lz4Codec : public CompressionCodec {
   Status Uncompress(const Slice& compressed,
                     uint8_t *uncompressed,
                     size_t uncompressed_length) const OVERRIDE {
-    int n = LZ4_decompress_fast(reinterpret_cast<const char *>(compressed.data()),
-                                reinterpret_cast<char *>(uncompressed), uncompressed_length);
-    if (n != compressed.size()) {
+    int n = LZ4_decompress_safe(reinterpret_cast<const char *>(compressed.data()),
+                                reinterpret_cast<char *>(uncompressed),
+                                compressed.size(), uncompressed_length);
+    if (n != uncompressed_length) {
       return Status::Corruption(
         StringPrintf("unable to uncompress the buffer. error near %d, buffer", -n),
                      KUDU_REDACT(compressed.ToDebugString(100)));