1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
|
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
|