diff --git a/src/taoensso/nippy.clj b/src/taoensso/nippy.clj index e2a35930..c87f4506 100644 --- a/src/taoensso/nippy.clj +++ b/src/taoensso/nippy.clj @@ -337,7 +337,7 @@ compression/lz4-compressor compression/lz4hc-compressor #_compression/lzo-compressor - #_compression/snappy-compressor ; Can be unsafe + compression/snappy-compressor compression/lzma2-compressor encryption/encrypt diff --git a/src/taoensso/nippy/compression.clj b/src/taoensso/nippy/compression.clj index bbbdbfea..d9bf1b99 100644 --- a/src/taoensso/nippy/compression.clj +++ b/src/taoensso/nippy/compression.clj @@ -201,13 +201,16 @@ See `taoensso.nippy-benchmarks` for detailed comparative benchmarks." (LZMA2Compressor. 0)) +(enc/def* snappy-compressor + "Default `Snappy` compressor: + - Compression ratio: `C` (0.58 on reference benchmark). + - Compression speed: `A+` (206 msecs on reference benchmark). + - Decompression speed: `B` (134 msecs on reference benchmark). + Good general-purpose compressor, favours speed. + See `taoensso.nippy-benchmarks` for detailed comparative benchmarks." + (SnappyCompressor. false)) + (enc/def* ^:no-doc lz4hc-compressor "Different LZ4 modes no longer supported, prefer `lz4-compressor`." {:deprecated "v3.4.0-RC1 (2024-02-06)"} (LZ4Compressor.)) - -(enc/def* ^:no-doc snappy-compressor - "Snappy compressor no longer recommended, prefer `lz4-compressor`. - Decompression can be unsafe against untrusted data!" - {:deprecated "v3.4.0-RC1 (2024-02-06)"} - (SnappyCompressor. false)) diff --git a/test/taoensso/nippy_tests.clj b/test/taoensso/nippy_tests.clj index 06bf095d..9bb9d9cd 100644 --- a/test/taoensso/nippy_tests.clj +++ b/test/taoensso/nippy_tests.clj @@ -423,16 +423,21 @@ ;;;; Compressors (deftest _compressors + (println "\nTesting decompression of random data...") (doseq [c [compr/zstd-compressor compr/lz4-compressor compr/lzo-compressor - #_compr/snappy-compressor ; Ref. + compr/snappy-compressor compr/lzma2-compressor]] - (dotimes [_ 2e4] - (is - (nil? (enc/catching (compr/decompress c (crypto/rand-bytes 1024)))) - "Decompression never crashes JVM, even against invalid data")))) + (print (str " With " (name (compr/header-id c)))) (flush) + (dotimes [_ 5] ; Slow, a few k laps should be sufficient for CI + (print ".") (flush) + (dotimes [_ 1000] + (is + (nil? (enc/catching (compr/decompress c (crypto/rand-bytes 1024)))) + "Decompression never crashes JVM, even against invalid data"))) + (println))) ;;;; Benchmarks