Revision history for Perl extension Sereal-Encoder

* Warning: For a seamless upgrade, upgrade to version 4        *
*          of the decoder before upgrading to version 4 of the *
*          encoder!                                            *

4.018 Thurs Aug 3, 2020
    * Fix issue with gcc 10 with snappy compression.

4.017 Thurs July 9, 2020
    * The build fixes in 4.016 didn't work correctly, this should fix them.

4.016 Thurs July 9, 2020
    * Fix some dependency issues in build process

4.015 Weds  July 8, 2020
    * Build fixes (missing dependency)

4.014 Thurs June 11, 2020
    * Fix build issue on non-win32 platforms.
    * Update zstd to 1.4.5

4.012 Weds June 10, 2020
    * Fix memory leak in looks_like_sereal(), thanks to Kirill Sysoev

4.011 Tues February 4, 2020
    * Fix and test custom opcode logic for 5.31.2 and later.

4.010 Tues February 4, 2020
    * Update miniz
    * Update zstd
    * perltidy perl code to a standard style

4.009 Fri January 31, 2020
    * Update ppport.h for modern perls.

4.008 Thurs January 30, 2020
    * Fixup casting error for pedantic compilers in srl_compress.h
    * Build fixes.

4.007 Tues Apr 9, 2019
    * Version bump only

4.006 Mon Apr 8, 2019
    * Version bump only

4.005 Tues Jan 23, 2018
    * Document encode_to_file()

4.004 Sun Nov 12
    * Fix build issues from C++ style comments
    * Fixup build_requires

4.003 Sun Nov 12
    * Fixup Devel::CheckLib usage
    * Do not compress using Snappy if the buffer is larger 2**32
    * Build fixes

    * Full release of Zstandard compression support etc.

4.001_001 Mon Feb  6 11:13:40 CEST 2017
    * Sereal v4 release with Zstandard compression support

3.015 Thu Sep  1 20:18:44 CEST 2016
    * Fix builds under 5.25+

3.014 Dec  7 2015
  * Fix builds under 5.8.9

3.012 Dec  6 2015
  * Yet another release related to broken META files. 
    ExtUtils::MakeMaker and CPAN::Meta need to be up to date
    or the META files miss stuff.

3.011 Dec  6 2015
  * No significant changes. Doc typo fixes, and build tweaks.

3.010 Dec  1 2015
  * Build fixes.

3.009 Nov 30 2015
  * Re-relase 3.008 with updated META files.

3.008 Nov 27 2015
  * FIX: Make sure that reserializing a data structure created
    using alias_varint_under does not produce a corrupted dataset.
    Thanks to Iskra for the report.
  * FIX: Precedence issue related to sort keys options. Thanks
    to Petr Písař <> for the report and fix.
  * FIX: Win32 build issues, thanks to bulk88 for help.

3.007 Nov 26 2015
  * FIX: sorting should now work with tied hashes, and
    be in general faster.
  * CHANGED: Sort order for sort_keys=1 is now defined to be
    "in order by length of bytes, then by byte order of the 
    underlying string, then by utd8ness, with non-utf8 first". 
    This sort order was chosen because it requires the least 
    operations to perform in the most cases, has a bounded number
    of cases where we would have to create any temporary SV's or 
    to do operations that require us to introspect codepoints in
    utf8 strings. IOW purely performance. Note that so long
    as you compare data created with the same sort_keys setting
    you will ALWAYS get the same order *in process*, regardless
    of what you choose. Backwards compatible support for  the
    old order is available via sort_keys=3.
    ADDED: sort_keys=2 to provide "perl cmp order"
           (Its just there because it is easy to do, not for any
            good reason.)
    ADDED: sort_keys=3 to provide "rev perl cmp order"

    Legacy sort order was equivalent to sort_keys=3, use this 
    option *ONLY* if you are extremely sensitive to changes in the
    sorted order (or "canonical form").

  * [DECODER] Build fixes for boxes without any Sereal installed (it seems
    to be common on certain types of smokers, and not on others).
  * Fix issues with serializing blessed scalars where we see the
    blessed scalar before we see the reference to it.
  * Handle PVLV undefs
  * Build fixes for 5.8.9
  * Doc patches
  * Optimizations

3.006 Nov 14 2015
  * [DECODER] fix segfaults from heavily corrupted data. Guards
    against various pathological cases which could cause segfaults
    fixed. Thanks to Damian Gryski and "fuzzing sereal with afl"
    for finding these cases.
  * [ENCODER] Various subtle fixes to how we choose whether to serialize
    the string or numeric version of a value, in particular to
    ensure that "00" always round trips as "00", and related issues.
    Note this fix has correctness and performance consequences. In
    some cases values that used to serialized as integers (arguably
    incorrectly) will be serialized as strings instead, and some code
    maybe be slower to serialize.
    NOTE: Some issues related to this subject are not fixable without
    a protocol change. In particular this change may affect the behavior
    of code that uses binary logical operators on values serialized
    with Perl.
    Thanks to Zefram, Tom, and others for help with this issue.
  * Fixups for cast warnings under -Wint-to-ptr builds by using
    using PTR2INT and INT2PTR for casting our objects.
  * Win32 fixes
  * Build improvements
  * Changes to how we generate constants

3.005 Jan 05 2015
  * Build improvements related to char signedness being platform

3.004 Dec 27 2014
  * Performance optimizations and other miscellaneous changes.
  * Build improvements.
  * Win32 fixes for weakrefs.

3.003 Oct 19 2014
  * Niko Tyni fixed the 64-bit big endian Sereal bug! (Yay Niko!)
  * Setup META.yml correctly so that certain dependencies are
    marked as being test dependencies and not build or run-time
  * Allow one to build against an externally supplied version
    of csnappy or miniz. Thanks to Petr Písař <>

3.002 Aug 20 2014
  Summary of changes from 3.001 - 3.002
  - Introduce "canonical" option to encoder
  - Introduce "canonical_refs" option to encoder

  * Test Infra Changes
  - Split up bulk tests to speed up testing and make it easier
    to see when a failure is restricted to a specific option.

  * Big-Endian Support
  - Improved support for Big-Endian machines. We now build and pass test
    on Sparc and HP-UX and other platforms with big-endian or strict
    alignedness requirements. Much thanks to Jarkko Hietaniemi,
    Gregor Herrmann, and H. Merijn Brand for for their assistance with
  - We still have issues with s390x (Z/Os) with Sereal. If someone wants
    to help it would be appreciated.

  - Upgrade to version 3 of the protocol
    * Add Zlib compression support to the protocol
    * Add Zlib support to Encoder/Decoder
    * Add CANONICAL_UNDEF tag to represent PL_sv_undef
    * Change magic header so it is trivial to detect
      and reject utf8 encoded Sereal packets.
  - Change how we serialize variables which have more
    than one of IOK, NOK, and POK set. In general we
    favour the numeric form, with the exception of when
    all three are set when we favour the string form
    (this is to handle engineering notation like "0E0"
    where numeric and string equivalence may differ)

Full change history available at