summaryrefslogtreecommitdiffstats
path: root/src
AgeCommit message (Collapse)AuthorFilesLines
2023-04-21Remove unnecessary const to silence compiler warningGravatar Nikias Bassen2-2/+2
2023-04-21C++: Remove deprecated Insert()Gravatar Nikias Bassen1-5/+0
2023-04-21C++: Add dictionary and array size methodGravatar Nikias Bassen2-0/+8
Thanks @Cryptiiiic for the contribution.
2023-04-21bplist: Fix offset range checkGravatar Nikias Bassen1-1/+1
Credit to OSS-Fuzz
2023-04-19Remove deprecated plist_dict_insert_item()Gravatar Nikias Bassen1-5/+0
2023-04-19Add plist_read_from_file() to interface, update plist_from_memory()Gravatar Nikias Bassen1-1/+51
plist_read_from_file() is a convenience function that will open a given file, checks its size, allocates a buffer large enough to hold the full contents, and reads from file to fill the buffer. Then, it calls plist_from_memory() to convert the data to plist format. A (breaking) change had to be made so that plist_from_memory() will also return the parsed format in its 4th argument (if non-NULL).
2023-04-16Add new output-only formats and Define constants for the different plist formatsGravatar Nikias Bassen9-6/+1538
This commit introduces constants for the different plist formats, and adds 3 new human-readable output-only formats: - PLIST_FORMAT_PRINT: the default human-readable format - PLIST_FORMAT_LIMD: "libimobiledevice" format (used in ideviceinfo) - PLIST_FORMAT_PLUTIL: plutil-style format Also, a new set of write functions has been added: - plist_write_to_string - plist_write_to_stream - plist_write_to_file Plus a simple "dump" function: - plist_print See documentation for details.
2023-02-07Fix build without --enable-debugGravatar Nikias Bassen4-0/+8
2023-02-07Add function to interface to allow enabling/disabling error/debug output for ↵Gravatar Nikias Bassen5-0/+33
the format parses This makes the `-d` option work in plistutil that wasn't doing anything
2023-02-06libcnary: Updated typedefs of node_t and node_list_t to contain pointerGravatar Nikias Bassen5-67/+64
This makes the code more readable. Obviously all the code that uses it is also updated.
2023-02-05Fix plist_sort() by swapping the nodes in the tree instead of their dataGravatar Nikias Bassen1-29/+33
The problem was that we swapped potential child node data between nodes, but their parents would not be updated that way, leading to double frees or segmentation faults when freeing a plist. This commit instead fixes this by swapping the actual nodes in the tree.
2023-02-03Add new plist_sort() functionGravatar Nikias Bassen1-0/+61
2023-02-03Add lowercase begin/end iterator functionsGravatar Daniel2-0/+40
... for Dictionary and Array
2023-02-03Add PList::Array iterator member functionsGravatar Daniel1-0/+20
... returning both iterators and const_iterators: * PList::Array::Begin() * PList::Array::End()
2023-01-31bplist: Fix handling of PLIST_NULL node typeGravatar Nikias Bassen2-0/+2
2023-01-31jplist: Fix handling of PLIST_NULL type when converting to JSONGravatar Nikias Bassen1-0/+3
2023-01-19xplist: Add missing newline to debug messageGravatar Nikias Bassen1-1/+1
2023-01-19jplist: Add missing newline to debug messageGravatar Nikias Bassen1-1/+1
2023-01-18oplist: Prevent too many levels of recursion to prevent stack overflowGravatar Nikias Bassen1-1/+9
Credit to OSS-Fuzz
2023-01-17oplist: Fix another OOB readGravatar Nikias Bassen1-0/+7
Credit to OSS-Fuzz
2023-01-16Rename PLIST_UINT to PLIST_INT and add plist_new_int() and plist_get_int_val()Gravatar Nikias Bassen10-38/+121
This properly supports getting and setting signed or unsigned integer values. Also, a new helper function plist_int_val_is_negative() was added to determine if a given #PLIST_INT node has a negative value or not. The old type PLIST_UINT is defined as a macro with the value of PLIST_INT for backwards compatibility. This commit also adds int vs. uint support to the C++ interface, and the python bindings in a hopefully useful way.
2023-01-13oplist: Fix another OOB readGravatar Nikias Bassen1-0/+3
Credit to OSS-Fuzz
2023-01-11oplist: Plug another memory leak occurring on parse errorGravatar Nikias Bassen1-0/+1
Credit to OSS-Fuzz
2023-01-11oplist: Plug some more memory leaks occuring when parsing failsGravatar Nikias Bassen1-4/+5
2023-01-09oplist: Add more bound checks to prevent OOB readsGravatar Nikias Bassen1-2/+32
2023-01-09oplist: Fix OOB read by checking bounds properlyGravatar Nikias Bassen1-1/+6
Credit to OSS-Fuzz
2023-01-09oplist: Fix use-after-free by setting free'd pointer to NULLGravatar Nikias Bassen1-0/+1
Credit to OSS-Fuzz
2023-01-09oplist: Plug memory leaks occurring when parsing failsGravatar Nikias Bassen1-0/+7
2023-01-08Add support for OpenStep plist formatGravatar Nikias Bassen3-5/+911
2023-01-08JSON: Only allow to convert PLIST_DICT or PLIST_ARRAY node to JSONGravatar Nikias Bassen1-0/+8
2022-11-02jplist: Prevent multiplication overflow by casting to larger typeGravatar Nikias Bassen1-2/+2
Found by CodeQL
2022-09-05jplist: Fix warning with `-Wbad-function-cast`Gravatar Nikias Bassen1-2/+2
2022-09-05Fix up warning with `-Wbad-function-cast`Gravatar Dave MacLachlan1-1/+4
2022-09-05Get rid of casting a ptr to a 32 bit valueGravatar Dave MacLachlan1-2/+2
This causes a warning if `-Wbad-function-cast` is enabled on a build.
2022-08-24bplist: Fix strict aliasing violationsGravatar Matthew Smith1-3/+9
Casting a float pointer to an int pointer is a strict aliasing violation (-Wstrict-aliasing) and is undefined behaviour (although, it did not seem to cause any real issues). An optimising compiler should elide the memcopies added by this commit.
2022-04-06jplist: Escape characters [0x00..0x1F] when converting to JSONGravatar Nikias Bassen1-5/+12
2022-04-06Skip whitespace to properly detect format in plist_from_memory()Gravatar Nikias Bassen1-3/+8
2022-02-15jplist: Fix another OOB read by using correct bounds checkGravatar Nikias Bassen1-1/+1
Credit to OSS-Fuzz
2022-02-11jplist: Fix OOB read by using correct bounds checkGravatar Nikias Bassen1-1/+1
Credit to OSS-Fuzz
2022-02-08jplist: Prevent read of uninitialized value by checking the bounds beforehandGravatar Nikias Bassen1-2/+2
Credit to OSS-Fuzz
2022-02-07xplist: Prevent undefined behavior by not trying to negate INT64_MINGravatar Nikias Bassen1-1/+1
2022-02-07jplist: Prevent integer overflow when parsing numerical valuesGravatar Nikias Bassen1-6/+29
Credit to OSS-Fuzz
2022-02-03jplist: Fix OOB read by making sure number of children is evenGravatar Nikias Bassen1-2/+6
Credit to OSS-Fuzz
2022-02-02jplist: Fix memory leak on parse errorGravatar Nikias Bassen1-0/+2
Credit to OSS-Fuzz
2022-02-02jplist: Improve numerical value parsing without copying data to stack bufferGravatar Nikias Bassen1-18/+62
Instead of calling strtoll() and atof(), the code now parses the numerical values directly to handle cases of non-0-terminated string data. The floating point value parsing is probably not ideal, but sufficient for our purposes.
2022-01-31jplist: Fix memory leak that occurs when JSON parsing failsGravatar Nikias Bassen1-0/+1
Credit to OSS-Fuzz
2022-01-31jplist: Fix OOB read in parse_primitive caused by missing 0-terminationGravatar Nikias Bassen1-2/+8
In parse_primitive, integer and double values are parsed by using strtoll and atof, which both expect the string to be 0-terminated. While this is not a problem in well-formed JSON files, it can be if the JSON data is not, possibly leading to a crash due to OOB memory access. This commit fixes it by copying the value data in question to a stack buffer and 0-terminate it, and use that buffer instead. Credit to OSS-Fuzz
2022-01-31jplist: Fix OOB read by making sure the JSMN token index is in valid rangeGravatar Nikias Bassen1-31/+48
Credit to OSS-Fuzz
2022-01-28jplist: Fix a few memory leaks that occur when parsing failsGravatar Nikias Bassen1-0/+5
Credit to OSS-Fuzz
2022-01-28jplist: Fix NULL pointer dereference by handling errors from unescape_string ↵Gravatar Nikias Bassen1-0/+6
correctly Credit to OSS-Fuzz