From 676898495c18045f35745ea97df8f443f50bc9bb Mon Sep 17 00:00:00 2001 From: Peter Taoussanis Date: Tue, 6 Feb 2024 12:57:04 +0100 Subject: [PATCH] [wip] Explore Snappy implementations --- project.clj | 4 +++- src/taoensso/nippy/compression.clj | 17 +++++++++++++++++ test/taoensso/nippy_tests.clj | 2 +- 3 files changed, 21 insertions(+), 2 deletions(-) diff --git a/project.clj b/project.clj index bbf5b9e..0bd10e7 100644 --- a/project.clj +++ b/project.clj @@ -11,7 +11,9 @@ [[org.clojure/tools.reader "1.3.7"] [com.taoensso/encore "3.77.0"] [org.tukaani/xz "1.9"] - [io.airlift/aircompressor "0.25"]] + [io.airlift/aircompressor "0.25"] + [org.iq80.snappy/snappy "0.4"] + [org.xerial.snappy/snappy-java "1.1.10.5"]] :profiles {;; :default [:base :system :user :provided :dev] diff --git a/src/taoensso/nippy/compression.clj b/src/taoensso/nippy/compression.clj index 2a8fb25..801d35f 100644 --- a/src/taoensso/nippy/compression.clj +++ b/src/taoensso/nippy/compression.clj @@ -116,6 +116,8 @@ (compress [_ ba] (airlift-compress @airlift-lzo-compressor_ ba true)) (decompress [_ ba] (airlift-decompress @airlift-lzo-decompressor_ ba nil)))) +;; Using `io.airlift/aircompressor`, vulnerable to https://github.com/airlift/aircompressor/issues/183 +#_ (do (enc/def* ^:private airlift-snappy-compressor_ (enc/thread-local (io.airlift.compress.snappy.SnappyCompressor.))) (enc/def* ^:private airlift-snappy-decompressor_ (enc/thread-local (io.airlift.compress.snappy.SnappyDecompressor.))) @@ -127,6 +129,21 @@ (when-not prepend-size? (io.airlift.compress.snappy.SnappyDecompressor/getUncompressedLength ba 0)))))) +;; Using `org.iq80.snappy/snappy`, vulnerable to https://github.com/airlift/aircompressor/issues/183 +#_ +(deftype SnappyCompressor [_] + ICompressor + (header-id [_] :snappy) + (compress [_ ba] (org.iq80.snappy.Snappy/compress ba)) + (decompress [_ ba] (org.iq80.snappy.Snappy/uncompress ba 0 (alength ^bytes ba)))) + +;; Using `org.xerial.snappy/snappy-java`, some compatibility issues due to JNI +(deftype SnappyCompressor [_] + ICompressor + (header-id [_] :snappy) + (compress [_ ba] (org.xerial.snappy.Snappy/compress ba)) + (decompress [_ ba] (org.xerial.snappy.Snappy/uncompress ba))) + ;;;; LZMA2 (deftype LZMA2Compressor [compression-level] diff --git a/test/taoensso/nippy_tests.clj b/test/taoensso/nippy_tests.clj index d2852b7..db923cf 100644 --- a/test/taoensso/nippy_tests.clj +++ b/test/taoensso/nippy_tests.clj @@ -429,7 +429,7 @@ compr/snappy-compressor compr/lzma2-compressor]] - (dotimes [_ 100] + (dotimes [_ 2e4] (is (nil? (enc/catching (compr/decompress c (crypto/rand-bytes 1024)))) "Decompression never core dumps, even against invalid data"))))