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
|
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
* Rename libplist*.pc to libplist*-2.0.pc according to pkg-config standard
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
|