Version 2.7.0
~~~~~~~~~~~~~

- Changes:
  * Add plist_new_unix_date, plist_get_unix_date_val, plist_set_unix_date_val functions
    that work with int64_t values representing a UNIX timestamp instead of
    using the 'MAC epoch'.
    These new functions should be used instead of plist_new_date,
    plist_get_date_val, and plist_set_date_val, which are now marked deprecated
    and might be removed in a future version of libplist.
  * Allow building the library without tool(s)
  * Switch to more generic global initializer method
  * json: Allow e+/E+ in exponent as per RFC 8259
  * C++: Add more convenience functions to the interface
  * C++: Add more type variants to different constructors and operators
- Bugfixes:
  * Fix segmentation fault when calling plist_sort() on an empty dictionary
  * Fix compilation on MSVC
  * C++: Fix bug in internal helper function of Array class
  * C++: Fix String::GetValue memory leaking and support assignment of const char*

Version 2.6.0
~~~~~~~~~~~~~

- Changes:
  * Revert back API change around PLIST_DATA to use char* again

Version 2.5.0
~~~~~~~~~~~~~

- Changes:
  * Change API around PLIST_DATA to use uint8_t* instead of char*
  * Add PLIST_DICT helper functions for different operations
  * Require Cython 3.0 for python bindings

Version 2.4.0
~~~~~~~~~~~~~

- Changes:
  * Add a PLIST_OPT_NONE value to plist_write_options_t
  * autoconf: Allow disabling build of test suite
  * Update doxygen config and document undocumented macros
  * Add an explicit PLIST_FORMAT_NONE value
  * Add a libplist_version() function to the interface
  * docs: Use README.md to generate mainpage with doxygen
- Bugfixes:
  * Several compiler-related fixes and code improvements
  * Plug memory leak in plist_write_to_stream()
  * Prevent adding NULL items to array/dictionary nodes
  * Fix parallel running of test suite
  * Fix cython bindings
  * Fix OOB read in plist_from_memory()

Version 2.3.0
~~~~~~~~~~~~~

- Changes:
  * Rename PLIST_UINT to PLIST_INT and add plist_new_int() and plist_get_int_val()
  * Add support for JSON format
  * Add support for OpenStep format
  * Introduce error codes and format constants
  * Add return value to import/export functions to allow returning error codes
  * Add new plist_sort function
  * Add several human-readable output-only formats
  * Add new plist_write_to_string/_stream/_file functions
  * Add new plist_print function
  * Add new plist_read_from_file function
  * Add new plist_mem_free() function
  * Add a few C++ methods
  * Add C++ interface test
  * Add PLIST_NULL type
  * Some code housekeeping (mostly clang-tidy)
- Breaking:
  * plist_from_memory() gets additional parameter
- Bugfixes:
  * Fix multiple bugs in all of the parsers
  * Fix handling of PLIST_UID nodes

Version 2.2.0
~~~~~~~~~~~~~

- Changes:
  * bplist: Improve recursion check performance by at least 30% for large files
  * test: Fix test suite on Windows
  * cython: Fix handling of Date nodes (MACH_EPOCH)
  * Add new plist_*_val_compare(), plist_*_val_contains() helper functions
  * Fix/suppress several compiler warnings
  * plistutil: Added ability for files to be read from stdin
  * plistutil: Added ability to specify output format
  * Fix: Return NULL from plist_copy() if passed a NULL pointer instead of asserting
  * Add GitHub Actions integration for automatic build tests
  * plistutil: Add manual page and usage output
  * Fix removal of docs directory on `make clean`
  * Improve README.md with project description, installation, contributing and
    usage sections
  * Rename library and all related files by adding an API version resulting
    in "libplist-2.0" and "libplist++-2.0"

Version 2.1.0
~~~~~~~~~~~~~

- Changes:
  * Add new plist_get_data_ptr() and plist_get_string_ptr() for direct access to underlying buffer
  * Increase precision when converting PLIST_REAL nodes to XML
  * Fix several issues in libcnary (UaF, segfault, memory leak)
  * Fix copying of hash table entries when cloning array/dict nodes
  * cython: Implement load()/loads() and dump()/dumps() to match up with plistlib (Python 3.4)
  * Add new plist_dict_item_get_key() for retrieving key node of a dict item
  * Add new plist_array_item_remove() to allow removing an array's child node without relying on the index
  * Make plist_array_get_item_index() return UINT_MAX instead of 0 when node can't be found
  * Add index lookup table for large PLIST_ARRAY nodes
  * Add iterator for array nodes: plist_array_new_iter(), plist_array_next_item()
  * Improve performance of plist_dict_next_item() drastically
  * Improve performance and memory usage when writing XML plists
  * Improve performance and memory usage when writing binary plists
  * Allow building with sanitizers (without fuzzers)
  * Prevent store to misaligned address when writing real/date nodes
  * Work around misaligned reads in binary plist parser
  * Integrate fuzzing targets (libFuzzer) into project
  * Add sanitizers (ASAN, UBSAN) when building fuzzers (--with-fuzzers)

Version 2.0.0
~~~~~~~~~~~~~

- Changes:
  * New light-weight custom XML parser
  * Remove libxml2 dependency
  * Refactor binary plist parsing
  * Improved malformed XML and binary plist detection and error handling
  * Add parser debug/error output (when compiled with --enable-debug), controlled via environment variables
  * Fix unicode character handling
  * Add PLIST_IS_* helper macros for the different node types
  * Extend date/time range and date conversion issues
  * Add plist_is_binary() and plist_from_memory() functions to the interface
  * Plug several memory leaks
  * Speed improvements for handling large plist files

- Includes security fixes for:
  * CVE-2017-6440
  * CVE-2017-6439
  * CVE-2017-6438
  * CVE-2017-6437
  * CVE-2017-6436
  * CVE-2017-6435
  * CVE-2017-5836
  * CVE-2017-5835
  * CVE-2017-5834
  * CVE-2017-5545
  * CVE-2017-5209
  ... and several others that didn't receive any CVE (yet).

Version 1.12
~~~~~~~~~~~~

- Changes:
  * Fix plist_from_bin() changing value nodes to key nodes in dictionaries
  * Avoid exporting non-public symbols
  * Prevent crash in plist_from_bin() when parsing unusual binary plists
  * Fix crash in String|Key::GetValue() and actually make C++ interface work
  * Fix memory leaks in new_xml_plist() and parse_real_node()
  * Fix header guards to conform to C++ standard
  * Update Cython based Python bindings and remove plist_new_key()
  * Fix key nodes not being output correctly if they contained XML entities
  * Fix handling and storage of signed vs. unsigned integer values
  * Fix date handling to respect the "Mac Epoch" instead of "Unix Epoch"
  * Remove plist_set_type() as it should not be used
  * Fix deprecated macros to work with older LLVM/Clang
  * Fix various shadowed declarations
  * Add documentation to explicitly describe memory buffer ownership
  * Fix memory leak in plist_from_bin()
  * Add various test cases based on fixes
  * Fix wrong timezone related date/time conversion of date nodes
  * Fix endian detection on MIPS architecture
  * Fix parallel build for autotools

Version 1.11
~~~~~~~~~~~~

- Changes:
  * Deprecated plist_dict_insert_item() in favor of plist_dict_set_item()
  * Updated cython bindings for Python 3.x
  * Removed swig python bindings
  * Changed build system to autotools
  * Added new plist_dict_merge() function
  * WIN32 (MinGW) + OSX compilation fixes
  * Made base64 decoding thread safe

Version 1.10
~~~~~~~~~~~~

- Changes:
  * Renamed plutil to plistutil to not mask Apple's plutil
  * Fixed cython bindings (broken in 1.9) 
  * Added support for PLIST_UID node types to C++, cython, and swig bindings

- Important Note:
  * Support for swig python bindings will be dropped with future releases.
    The bindings will be kept in the source tree for now, but we suggest
    to update your python code to use the cython bindings instead.

Version 1.9
~~~~~~~~~~~

- Changes:
  * Add support for handling UID node types
  * Fix crash when converting plists containing comments
  * Fix Bug in plist_data_compare()
  * Fix DST handling for PLIST_DATE
  * Fix plist_dict_set_item() and plist_array_set_item()
  * Fix cython String plist handling
  * Fix invalid memory access in copy_plist_data()
  * Fix several compiler warnings

Version 1.8
~~~~~~~~~~~

- Changes:
  * Add cython bindings
  * Fix error in swig bindings
  * Fix memory corruption in libcnary

Version 1.7
~~~~~~~~~~~

- Changes:
  * Fix building on Big Endian systems

Version 1.6
~~~~~~~~~~~

- Changes:
  * Updated libcnary sources, adding license and copyright info

Version 1.5
~~~~~~~~~~~

- Changes:
  * Removed glib dependency, libplist now uses libcnary
    (http://github.com/Chronic-Dev/libcnary)
  * Fix building of python bindings with GCC 4.6

Version 1.4
~~~~~~~~~~~

- New maintainer and source location
- Changes:
  * Update AUTHORS from git history
  * Fix Unicode writing in binary plists
  * Update plist doctype
  * Fix Dictionary copy constructor
  * Fix Mac OS X library install path detection
  * Plug memory leak when writing Unicode data

Version 1.3
~~~~~~~~~~~

- Changes:
  * Endianness, alignment and type-punning fixes
  * Fix armel floating point endianess 
  * Allow compiling with mingw on Windows
  * Minor bugfixes

Version 1.2
~~~~~~~~~~~

- Changes:
  * Fix xml entity conversion
  * Silence build warnings

Version 1.1
~~~~~~~~~~~

- Changes:
  * Fix use of integer nodes within Python Bindings

Version 1.0
~~~~~~~~~~~

- Changes:
  * Bugfixes
  * Remove deprecated API

Version 0.16
~~~~~~~~~~~~

- Changes:
  * Build fixes
  * Fix issues with SWIG

Version 0.15
~~~~~~~~~~~~

- Changes:
  * Build fixes

Version 0.14
~~~~~~~~~~~~

- Changes:
  * Add C++ binding
  * Refactor API
  * Bugfixes

Version 0.13
~~~~~~~~~~~~

- Changes:
  * Add plist_copy for deep node copies
  * Add node setter functions
  * Unlink nodes from parent if free'd
  * Update Python bindings

Version 0.12
~~~~~~~~~~~~

- Changes:
  * Merge ascii and unicode handling in PLIST_STRING using UTF-8
  * Remove unicode related declaration in API (breaks API&ABI)
  * Fix bad variable type for date elements
  * Silence compiler warnings
  * Plugged few memory leaks

Version 0.11
~~~~~~~~~~~~

- Changes:
  * Fix Python binding segfaults
  * Python API additions
  * Better binary buffer handling in Python bindings

