| Version 2.8.0 | |
| ~~~~~~~~~~~~~ | |
| - Changes: | |
| * Convert plist_array_set_item, plist_array_append_item, plist_array_insert_item, | |
| plist_array_remove_item, plist_array_item_remove, plist_dict_set_item, | |
| plist_dict_remove_item, and plist_dict_merge from void to plist_err_t return | |
| type so that memory allocation and other errors can be reported | |
| * Make #PLIST_ARRAY and #PLIST_DICT iterators opaque; add plist_array_free_iter | |
| and plist_dict_free_iter to release them | |
| * Add JSON coercion support for non-JSON plist types | |
| * Add OpenStep coercion support for non-OpenStep plist types | |
| * Add circular reference detection to all format writers | |
| * Prevent deep nesting of plist structures in all input/output formats | |
| * plistutil: Use getopt for solid option parsing | |
| * plistutil: Add a --nodepath option to allow selecting a specific node | |
| * plistutil: Read STDIN in chunks instead of one byte at a time | |
| * plistutil: preserve binary data on Windows standard streams | |
| * Add NULL checks and error handling across the codebase (node_attach/insert | |
| failures, realloc failures in byte_array_grow/ptr_array_insert, etc.) | |
| * Make plist copy and free implementations iterative to avoid stack overflow | |
| on deeply nested structures | |
| * docs: Add OpenStep to man page | |
| - Bugfixes: | |
| * Fix heap overflow caused by incorrect PLIST_STRING length during copy | |
| * Fix UTF-8 to UTF-16 decoding and enforce strict validation in bplist | |
| * Fix inverted strcmp in string to boolean conversion | |
| * Fix incorrect size storage in plist_copy() for PLIST_STRING nodes | |
| * Fix is_ascii_string by using a sufficiently large data type | |
| * Fix bplist offset_table range check and add overflow check to node offset | |
| pointer arithmetic | |
| * Reject insertion of plist nodes that already have a parent | |
| * xplist: Enforce single root value inside <plist> | |
| * xplist: Convert nested {CF$UID:<int>} dicts to PLIST_UID safely | |
| * xplist: Harden entity unescaping against malformed input and improve | |
| robustness of XML text parsing and value conversion | |
| * Fix plist_is_binary() not checking for NULL input | |
| * Fix a few memory leaks in JSON parsing and libcnary node_copy_deep() | |
| * Fix Cython crashes | |
| * Fix fread() unused return values by actually handling errors | |
| * Fix Integer constructor to copy plist node (C++ bindings) | |
| * Various smaller compiler warning and portability fixes (MSVC ssize_t, | |
| format specifiers, WIN32 time_s support) | |
| 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 | |