]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
lib-compression: use LZ4_compress_default if can
authorMartti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
Wed, 21 Dec 2016 05:53:52 +0000 (07:53 +0200)
committerGitLab <gitlab@git.dovecot.net>
Tue, 27 Dec 2016 13:01:35 +0000 (15:01 +0200)
LZ4_compress is deprecated.

m4/want_lz4.m4
src/lib-compression/ostream-lz4.c

index 00fae5a95bf20ff77053abfd3251eeb3870a4b56..4890b11edafbbb81f23d03e87272896580ac2c93 100644 (file)
@@ -11,6 +11,11 @@ AC_DEFUN([DOVECOT_WANT_LZ4], [
           AC_ERROR([Can't build with lz4 support: liblz4 not found])
         fi
       ])
+      AC_CHECK_LIB(lz4, LZ4_compress_default, [
+        AC_DEFINE(HAVE_LZ4_COMPRESS_DEFAULT,,
+          [Define if you have LZ4_compress_default])
+      ], [
+      ])
     ], [
       if test "$want_lz4" = "yes"; then
         AC_ERROR([Can't build with lz4 support: lz4.h not found])
index f0109650e8f018d498c00b89bc7b7eb94260542c..60c49f36707bd2d52b579a961ab938f24dc33306 100644 (file)
@@ -71,10 +71,27 @@ static int o_stream_lz4_compress(struct lz4_ostream *zstream)
        i_assert(zstream->outbuf_offset == 0);
        i_assert(zstream->outbuf_used == 0);
 
+#if defined(HAVE_LZ4_COMPRESS_DEFAULT)
+       int max_dest_size = LZ4_compressBound(zstream->compressbuf_offset);
+       i_assert(max_dest_size >= 0);
+       if (max_dest_size == 0) {
+               io_stream_set_error(&zstream->ostream.iostream,
+                       "lz4-compress: input size %u too large (> %u)",
+                       zstream->compressbuf_offset, LZ4_MAX_INPUT_SIZE);
+               zstream->ostream.ostream.stream_errno = EINVAL;
+               return -1;
+       }
+       ret = LZ4_compress_default((void *)zstream->compressbuf,
+                                  (void *)(zstream->outbuf +
+                                           IOSTREAM_LZ4_CHUNK_PREFIX_LEN),
+                                  zstream->compressbuf_offset,
+                                  max_dest_size);
+#else
        ret = LZ4_compress((void *)zstream->compressbuf,
                           (void *)(zstream->outbuf +
                                    IOSTREAM_LZ4_CHUNK_PREFIX_LEN),
                           zstream->compressbuf_offset);
+#endif /* defined(HAVE_LZ4_COMPRESS_DEFAULT) */
        i_assert(ret > 0 && (unsigned int)ret <= sizeof(zstream->outbuf) -
                 IOSTREAM_LZ4_CHUNK_PREFIX_LEN);
        zstream->outbuf_used = IOSTREAM_LZ4_CHUNK_PREFIX_LEN + ret;