**NB BREAKING**: change default :v1-compatibility? thaw option
Motivation for changing this default: v1 compatibility requires that in the event of a thaw failure, a fallback attempt is made using v1 options. This must include an attempt at Snappy decompression. But the version of Snappy we're using has a major bug that can segfault + crash the JVM when attempted against non-Snappy data: https://github.com/dain/snappy/issues/20 I'd switch to an alternative Snappy implementation, but the only other implementation I'm aware of uses JNI which can introduce troublesome compatibility issues even for people who don't want the Snappy support. Had hoped that the Snappy bug would eventually get fixed, but that's looking unlikely. Nippy v2 was released on July 22nd 2013 (2 years, 2 months ago) - so am hoping that the majority of lib users will no longer have a need for v1 data thaw support at this point. For those that do, they can re-enable v1 thaw support with this flag. If a better alternative solution ever presents (e.g. the Snappy bug is fixed, an alternative implementation turns up, or we write a util to reliably identify Snappy compressed data) - we can re-enable this flag by default.
This commit is contained in:
parent
e71df20a42
commit
9c8adfe513
1 changed files with 8 additions and 5 deletions
|
|
@ -656,19 +656,22 @@
|
|||
|
||||
(defn thaw
|
||||
"Deserializes a frozen object from given byte array to its original Clojure
|
||||
data type. Supports data frozen with current and all previous versions of
|
||||
Nippy. To thaw custom types, extend the Clojure reader or see `extend-thaw`.
|
||||
data type. To thaw custom types, extend the Clojure reader or see `extend-thaw`.
|
||||
|
||||
** By default, supports data frozen with Nippy v2+ ONLY **
|
||||
Add `{:v1-compatibility? true}` option to support thawing of data frozen with
|
||||
legacy versions of Nippy.
|
||||
|
||||
Options include:
|
||||
:v1-compatibility? - support data frozen by legacy versions of Nippy?
|
||||
:compressor - An ICompressor, :auto (requires Nippy header), or nil
|
||||
:encryptor - An IEncryptor, :auto (requires Nippy header), or nil"
|
||||
|
||||
([ba] (thaw ba nil))
|
||||
([^bytes ba
|
||||
{:keys [v1-compatibility? compressor encryptor password]
|
||||
:or {v1-compatibility? true ; Recommend disabling when possible
|
||||
compressor :auto
|
||||
encryptor :auto}
|
||||
:or {compressor :auto
|
||||
encryptor :auto}
|
||||
:as opts}]
|
||||
|
||||
(assert (not (:headerless-meta opts))
|
||||
|
|
|
|||
Loading…
Reference in a new issue