17 changed files with 5674 additions and 1 deletions
@ -0,0 +1,52 @@ |
|||
# Prerequisites |
|||
*.d |
|||
|
|||
# Object files |
|||
*.o |
|||
*.ko |
|||
*.obj |
|||
*.elf |
|||
|
|||
# Linker output |
|||
*.ilk |
|||
*.map |
|||
*.exp |
|||
|
|||
# Precompiled Headers |
|||
*.gch |
|||
*.pch |
|||
|
|||
# Libraries |
|||
*.lib |
|||
*.a |
|||
*.la |
|||
*.lo |
|||
|
|||
# Shared objects (inc. Windows DLLs) |
|||
*.dll |
|||
*.so |
|||
*.so.* |
|||
*.dylib |
|||
|
|||
# Executables |
|||
*.exe |
|||
*.out |
|||
*.app |
|||
*.i*86 |
|||
*.x86_64 |
|||
*.hex |
|||
|
|||
# Debug files |
|||
*.dSYM/ |
|||
*.su |
|||
*.idb |
|||
*.pdb |
|||
|
|||
# Kernel Module Compile Results |
|||
*.mod* |
|||
*.cmd |
|||
.tmp_versions/ |
|||
modules.order |
|||
Module.symvers |
|||
Mkfile.old |
|||
dkms.conf |
@ -0,0 +1,454 @@ |
|||
1.7.17 (Dec 26, 2023) |
|||
====== |
|||
Fixes: |
|||
------ |
|||
* Fix null reference in cJSON_SetValuestring(CVE-2023-50472), see #809 |
|||
* Fix null reference in cJSON_InsertItemInArray(CVE-2023-50471), see #809 and #810 |
|||
|
|||
1.7.16 (Jul 5, 2023) |
|||
====== |
|||
Features: |
|||
------ |
|||
* Add an option for ENABLE_CJSON_VERSION_SO in CMakeLists.txt, see #534 |
|||
* Add cmake_policy to CMakeLists.txt, see #163 |
|||
* Add cJSON_SetBoolValue, see #639 |
|||
* Add meson documentation, see #761 |
|||
|
|||
Fixes: |
|||
------ |
|||
* Fix memory leak in merge_patch, see #611 |
|||
* Fix conflicting target names 'uninstall', see #617 |
|||
* Bump cmake version to 3.0 and use new version syntax, see #587 |
|||
* Print int without decimal places, see #630 |
|||
* Fix 'cjson_utils-static' target not exist, see #625 |
|||
* Add allocate check for replace_item_in_object, see #675 |
|||
* Fix a null pointer crash in cJSON_ReplaceItemViaPointer, see #726 |
|||
|
|||
1.7.15 (Aug 25, 2021) |
|||
====== |
|||
Fixes: |
|||
------ |
|||
* Fix potential core dumped for strrchr, see [#546](https://github.com/DaveGamble/cJSON/pull/546) |
|||
* Fix null pointer crash in cJSON_CreateXxArray, see [#538](https://github.com/DaveGamble/cJSON/pull/538) |
|||
* Fix several null pointer problems on allocation failure, see [#526](https://github.com/DaveGamble/cJSON/pull/526) |
|||
* Fix a possible dereference of null pointer, see [#519](https://github.com/DaveGamble/cJSON/pull/519) |
|||
* Fix windows build failure about defining nan, see [#518](https://github.com/DaveGamble/cJSON/pull/518) |
|||
|
|||
1.7.14 (Sep 3, 2020) |
|||
====== |
|||
Fixes: |
|||
------ |
|||
* optimize the way to find tail node, see [#503](https://github.com/DaveGamble/cJSON/pull/503) |
|||
* Fix WError error on macosx because NAN is a float. Thanks @sappo, see [#484](https://github.com/DaveGamble/cJSON/pull/484) |
|||
* Fix some bugs in detach and replace. Thanks @miaoerduo, see [#456](https://github.com/DaveGamble/cJSON/pull/456) |
|||
|
|||
1.7.13 (Apr 2, 2020) |
|||
====== |
|||
Features: |
|||
--------- |
|||
* add new API of cJSON_ParseWithLength without breaking changes. Thanks @caglarivriz, see [#358](https://github.com/DaveGamble/cJSON/pull/358) |
|||
* add new API of cJSON_GetNumberValue. Thanks @Intuition, see[#385](https://github.com/DaveGamble/cJSON/pull/385) |
|||
* add uninstall target function for CMake. See [#402](https://github.com/DaveGamble/cJSON/pull/402) |
|||
* Improve performance of adding item to array. Thanks @xiaomianhehe, see [#430](https://github.com/DaveGamble/cJSON/pull/430), [#448](https://github.com/DaveGamble/cJSON/pull/448) |
|||
* add new API of cJSON_SetValuestring, for changing the valuestring safely. See [#451](https://github.com/DaveGamble/cJSON/pull/451) |
|||
* add return value for cJSON_AddItemTo... and cJSON_ReplaceItem... (check if the operation successful). See [#453](https://github.com/DaveGamble/cJSON/pull/453) |
|||
|
|||
Fixes: |
|||
------ |
|||
* Fix clang -Wfloat-equal warning. Thanks @paulmalovanyi, see [#368](https://github.com/DaveGamble/cJSON/pull/368) |
|||
* Fix make failed in mac os. See [#405](https://github.com/DaveGamble/cJSON/pull/405) |
|||
* Fix memory leak in cJSONUtils_FindPointerFromObjectTo. Thanks @andywolk for reporting, see [#414](https://github.com/DaveGamble/cJSON/issues/414) |
|||
* Fix bug in encode_string_as_pointer. Thanks @AIChangJiang for reporting, see [#439](https://github.com/DaveGamble/cJSON/issues/439) |
|||
|
|||
1.7.12 (May 17, 2019) |
|||
====== |
|||
Fixes: |
|||
------ |
|||
* Fix infinite loop in `cJSON_Minify` (potential Denial of Service). Thanks @Alanscut for reporting, see [#354](https://github.com/DaveGamble/cJSON/issues/354) |
|||
* Fix link error for Visual Studio. Thanks @tan-wei, see [#352](https://github.com/DaveGamble/cJSON/pull/352). |
|||
* Undefine `true` and `false` for `cJSON_Utils` before redefining them. Thanks @raiden00pl, see [#347](https://github.com/DaveGamble/cJSON/pull/347). |
|||
|
|||
1.7.11 (Apr 15, 2019) |
|||
====== |
|||
Fixes: |
|||
------ |
|||
* Fix a bug where cJSON_Minify could overflow it's buffer, both reading and writing. This is a security issue, see [#338](https://github.com/DaveGamble/cJSON/issues/338). Big thanks @bigric3 for reporting. |
|||
* Unset `true` and `false` macros before setting them if they exist. See [#339](https://github.com/DaveGamble/cJSON/issues/339), thanks @raiden00pl for reporting |
|||
|
|||
1.7.10 (Dec 21, 2018) |
|||
====== |
|||
Fixes: |
|||
------ |
|||
* Fix package config file for `libcjson`. Thanks @shiluotang for reporting [#321](https://github.com/DaveGamble/cJSON/issues/321) |
|||
* Correctly split lists in `cJSON_Utils`'s merge sort. Thanks @andysCaplin for the fix [#322](https://github.com/DaveGamble/cJSON/issues/322) |
|||
|
|||
1.7.9 (Dec 16, 2018) |
|||
===== |
|||
Fixes: |
|||
------ |
|||
* Fix a bug where `cJSON_GetObjectItemCaseSensitive` would pass a nullpointer to `strcmp` when called on an array, see [#315](https://github.com/DaveGamble/cJSON/issues/315). Thanks @yuweol for reporting. |
|||
* Fix error in `cJSON_Utils` where the case sensitivity was not respected, see [#317](https://github.com/DaveGamble/cJSON/pull/317). Thanks @yuta-oxo for fixing. |
|||
* Fix some warnings detected by the Visual Studio Static Analyzer, see [#307](https://github.com/DaveGamble/cJSON/pull/307). Thanks @bnason-nf |
|||
|
|||
1.7.8 (Sep 22, 2018) |
|||
====== |
|||
Fixes: |
|||
------ |
|||
* cJSON now works with the `__stdcall` calling convention on Windows, see [#295](https://github.com/DaveGamble/cJSON/pull/295), thanks @zhindes for contributing |
|||
|
|||
1.7.7 (May 22, 2018) |
|||
===== |
|||
Fixes: |
|||
------ |
|||
* Fix a memory leak when realloc fails, see [#267](https://github.com/DaveGamble/cJSON/issues/267), thanks @AlfieDeng for reporting |
|||
* Fix a typo in the header file, see [#266](https://github.com/DaveGamble/cJSON/pull/266), thanks @zhaozhixu |
|||
|
|||
1.7.6 (Apr 13, 2018) |
|||
===== |
|||
Fixes: |
|||
------ |
|||
* Add `SONAME` to the ELF files built by the Makefile, see [#252](https://github.com/DaveGamble/cJSON/issues/252), thanks @YanhaoMo for reporting |
|||
* Add include guards and `extern "C"` to `cJSON_Utils.h`, see [#256](https://github.com/DaveGamble/cJSON/issues/256), thanks @daschfg for reporting |
|||
|
|||
Other changes: |
|||
* Mark the Makefile as deprecated in the README. |
|||
|
|||
1.7.5 (Mar 23, 2018) |
|||
===== |
|||
Fixes: |
|||
------ |
|||
* Fix a bug in the JSON Patch implementation of `cJSON Utils`, see [#251](https://github.com/DaveGamble/cJSON/pull/251), thanks @bobkocisko. |
|||
|
|||
1.7.4 (Mar 3, 2018) |
|||
===== |
|||
Fixes: |
|||
------ |
|||
* Fix potential use after free if the `string` parameter to `cJSON_AddItemToObject` is an alias of the `string` property of the object that is added,see [#248](https://github.com/DaveGamble/cJSON/issues/248). Thanks @hhallen for reporting. |
|||
|
|||
1.7.3 (Feb 8, 2018) |
|||
===== |
|||
Fixes: |
|||
------ |
|||
* Fix potential double free, thanks @projectgus for reporting [#241](https://github.com/DaveGamble/cJSON/issues/241) |
|||
|
|||
1.7.2 (Feb 6, 2018) |
|||
===== |
|||
Fixes: |
|||
------ |
|||
* Fix the use of GNUInstallDirs variables and the pkgconfig file. Thanks @zeerd for reporting [#240](https://github.com/DaveGamble/cJSON/pull/240) |
|||
|
|||
1.7.1 (Jan 10, 2018) |
|||
===== |
|||
Fixes: |
|||
------ |
|||
* Fixed an Off-By-One error that could lead to an out of bounds write. Thanks @liuyunbin for reporting [#230](https://github.com/DaveGamble/cJSON/issues/230) |
|||
* Fixed two errors with buffered printing. Thanks @liuyunbin for reporting [#230](https://github.com/DaveGamble/cJSON/issues/230) |
|||
|
|||
1.7.0 (Dec 31, 2017) |
|||
===== |
|||
Features: |
|||
--------- |
|||
* Large rewrite of the documentation, see [#215](https://github.com/DaveGamble/cJSON/pull/215) |
|||
* Added the `cJSON_GetStringValue` function |
|||
* Added the `cJSON_CreateStringReference` function |
|||
* Added the `cJSON_CreateArrayReference` function |
|||
* Added the `cJSON_CreateObjectReference` function |
|||
* The `cJSON_Add...ToObject` macros are now functions that return a pointer to the added item, see [#226](https://github.com/DaveGamble/cJSON/pull/226) |
|||
|
|||
Fixes: |
|||
------ |
|||
* Fix a problem with `GNUInstallDirs` in the CMakeLists.txt, thanks @yangfl, see [#210](https://github.com/DaveGamble/cJSON/pull/210) |
|||
* Fix linking the tests when building as static library, see [#213](https://github.com/DaveGamble/cJSON/issues/213) |
|||
* New overrides for the CMake option `BUILD_SHARED_LIBS`, see [#207](https://github.com/DaveGamble/cJSON/issues/207) |
|||
|
|||
Other Changes: |
|||
-------------- |
|||
* Readme: Explain how to include cJSON, see [#211](https://github.com/DaveGamble/cJSON/pull/211) |
|||
* Removed some trailing spaces in the code, thanks @yangfl, see [#212](https://github.com/DaveGamble/cJSON/pull/212) |
|||
* Updated [Unity](https://github.com/ThrowTheSwitch/Unity) and [json-patch-tests](https://github.com/json-patch/json-patch-tests) |
|||
|
|||
1.6.0 (Oct 9, 2017) |
|||
===== |
|||
Features: |
|||
--------- |
|||
* You can now build cJSON as both shared and static library at once with CMake using `-DBUILD_SHARED_AND_STATIC_LIBS=On`, see [#178](https://github.com/DaveGamble/cJSON/issues/178) |
|||
* UTF-8 byte order marks are now ignored, see [#184](https://github.com/DaveGamble/cJSON/issues/184) |
|||
* Locales can now be disabled with the option `-DENABLE_LOCALES=Off`, see [#202](https://github.com/DaveGamble/cJSON/issues/202), thanks @Casperinous |
|||
* Better support for MSVC and Visual Studio |
|||
|
|||
Other Changes: |
|||
-------------- |
|||
* Add the new warnings `-Wswitch-enum`, `-Wused-but-makred-unused`, `-Wmissing-variable-declarations`, `-Wunused-macro` |
|||
* More number printing tests. |
|||
* Continuous integration testing with AppVeyor (semi automatic at this point), thanks @simon-p-r |
|||
|
|||
1.5.9 (Sep 8, 2017) |
|||
===== |
|||
Fixes: |
|||
------ |
|||
* Set the global error pointer even if `return_parse_end` is passed to `cJSON_ParseWithOpts`, see [#200](https://github.com/DaveGamble/cJSON/pull/200), thanks @rmallins |
|||
|
|||
1.5.8 (Aug 21, 2017) |
|||
===== |
|||
Fixes: |
|||
------ |
|||
* Fix `make test` in the Makefile, thanks @YanhaoMo for reporting this [#195](https://github.com/DaveGamble/cJSON/issues/195) |
|||
|
|||
1.5.7 (Jul 13, 2017) |
|||
===== |
|||
Fixes: |
|||
------ |
|||
* Fix a bug where realloc failing would return a pointer to an invalid memory address. This is a security issue as it could potentially be used by an attacker to write to arbitrary memory addresses, see [#189](https://github.com/DaveGamble/cJSON/issues/189), fixed in [954d61e](https://github.com/DaveGamble/cJSON/commit/954d61e5e7cb9dc6c480fc28ac1cdceca07dd5bd), big thanks @timothyjohncarney for reporting this issue |
|||
* Fix a spelling mistake in the AFL fuzzer dictionary, see [#185](https://github.com/DaveGamble/cJSON/pull/185), thanks @jwilk |
|||
|
|||
1.5.6 (Jun 28, 2017) |
|||
===== |
|||
Fixes: |
|||
------ |
|||
* Make cJSON a lot more tolerant about passing NULL pointers to its functions, it should now fail safely instead of dereferencing the pointer, see [#183](https://github.com/DaveGamble/cJSON/pull/183). Thanks @msichal for reporting [#182](https://github.com/DaveGamble/cJSON/issues/182) |
|||
|
|||
1.5.5 (Jun 15, 2017) |
|||
===== |
|||
Fixes: |
|||
------ |
|||
* Fix pointers to nested arrays in cJSON_Utils, see [9abe](https://github.com/DaveGamble/cJSON/commit/9abe75e072050f34732a7169740989a082b65134) |
|||
* Fix an error with case sensitivity handling in cJSON_Utils, see [b9cc911](https://github.com/DaveGamble/cJSON/commit/b9cc911831b0b3e1bb72f142389428e59f882b38) |
|||
* Fix cJSON_Compare for arrays that are prefixes of the other and objects that are a subset of the other, see [03ba72f](https://github.com/DaveGamble/cJSON/commit/03ba72faec115160d1f3aea5582d9b6af5d3e473) and [#180](https://github.com/DaveGamble/cJSON/issues/180), thanks @zhengqb for reporting |
|||
|
|||
1.5.4 (Jun 5, 2017) |
|||
====== |
|||
Fixes: |
|||
------ |
|||
* Fix build with GCC 7.1.1 and optimization level `-O2`, see [bfbd8fe](https://github.com/DaveGamble/cJSON/commit/bfbd8fe0d85f1dd21e508748fc10fc4c27cc51be) |
|||
|
|||
Other Changes: |
|||
-------------- |
|||
* Update [Unity](https://github.com/ThrowTheSwitch/Unity) to 3b69beaa58efc41bbbef70a32a46893cae02719d |
|||
|
|||
1.5.3 (May 23, 2017) |
|||
===== |
|||
Fixes: |
|||
------ |
|||
* Fix `cJSON_ReplaceItemInObject` not keeping the name of an item, see [#174](https://github.com/DaveGamble/cJSON/issues/174) |
|||
|
|||
1.5.2 (May 10, 2017) |
|||
===== |
|||
Fixes: |
|||
------ |
|||
* Fix a reading buffer overflow in `parse_string`, see [a167d9e](https://github.com/DaveGamble/cJSON/commit/a167d9e381e5c84bc03de4e261757b031c0c690d) |
|||
* Fix compiling with -Wcomma, see [186cce3](https://github.com/DaveGamble/cJSON/commit/186cce3ece6ce6dfcb58ac8b2a63f7846c3493ad) |
|||
* Remove leftover attribute from tests, see [b537ca7](https://github.com/DaveGamble/cJSON/commit/b537ca70a35680db66f1f5b8b437f7114daa699a) |
|||
|
|||
1.5.1 (May 6, 2017) |
|||
===== |
|||
Fixes: |
|||
------ |
|||
* Add gcc version guard to the Makefile, see [#164](https://github.com/DaveGamble/cJSON/pull/164), thanks @juvasquezg |
|||
* Fix incorrect free in `cJSON_Utils` if custom memory allocator is used, see [#166](https://github.com/DaveGamble/cJSON/pull/166), thanks @prefetchnta |
|||
|
|||
1.5.0 (May 2, 2017) |
|||
===== |
|||
Features: |
|||
* cJSON finally prints numbers without losing precision, see [#153](https://github.com/DaveGamble/cJSON/pull/153), thanks @DeboraG |
|||
* `cJSON_Compare` recursively checks if two cJSON items contain the same values, see [#148](https://github.com/DaveGamble/cJSON/pull/148) |
|||
* Provide case sensitive versions of every function where it matters, see [#158](https://github.com/DaveGamble/cJSON/pull/158) and [#159](https://github.com/DaveGamble/cJSON/pull/159) |
|||
* Added `cJSON_ReplaceItemViaPointer` and `cJSON_DetachItemViaPointer` |
|||
* Added `cJSON_free` and `cJSON_malloc` that expose the internal configured memory allocators. see [02a05ee](https://github.com/DaveGamble/cJSON/commit/02a05eea4e6ba41811f130b322660bea8918e1a0) |
|||
|
|||
|
|||
Enhancements: |
|||
------------- |
|||
* Parse into a buffer, this will allow parsing `\u0000` in the future (not quite yet though) |
|||
* General simplifications and readability improvements |
|||
* More unit tests |
|||
* Update [unity](https://github.com/ThrowTheSwitch/Unity) testing library to 2.4.1 |
|||
* Add the [json-patch-tests](https://github.com/json-patch/json-patch-tests) test suite to test cJSON_Utils. |
|||
* Move all tests from `test_utils.c` to unit tests with unity. |
|||
|
|||
Fixes: |
|||
------ |
|||
* Fix some warnings with the Microsoft compiler, see [#139](https://github.com/DaveGamble/cJSON/pull/139), thanks @PawelWMS |
|||
* Fix several bugs in cJSON_Utils, mostly found with [json-patch-tests](https://github.com/json-patch/json-patch-tests) |
|||
* Prevent a stack overflow by specifying a maximum nesting depth `CJSON_NESTING_LIMIT` |
|||
|
|||
Other Changes: |
|||
-------------- |
|||
* Move generated files in the `library_config` subdirectory. |
|||
|
|||
1.4.7 (Apr 19, 2017) |
|||
===== |
|||
Fixes: |
|||
------ |
|||
* Fix `cJSONUtils_ApplyPatches`, it was completely broken and apparently nobody noticed (or at least reported it), see [075a06f](https://github.com/DaveGamble/cJSON/commit/075a06f40bdc4f836c7dd7cad690d253a57cfc50) |
|||
* Fix inconsistent prototype for `cJSON_GetObjectItemCaseSensitive`, see [51d3df6](https://github.com/DaveGamble/cJSON/commit/51d3df6c9f7b56b860c8fb24abe7bab255cd4fa9), thanks @PawelWMS |
|||
|
|||
1.4.6 (Apr 9, 2017) |
|||
===== |
|||
Fixes: |
|||
------ |
|||
* Several corrections in the README |
|||
* Making clear that `valueint` should not be written to |
|||
* Fix overflow detection in `ensure`, see [2683d4d](https://github.com/DaveGamble/cJSON/commit/2683d4d9873df87c4bdccc523903ddd78d1ad250) |
|||
* Fix a potential null pointer dereference in cJSON_Utils, see [795c3ac](https://github.com/DaveGamble/cJSON/commit/795c3acabed25c9672006b2c0f40be8845064827) |
|||
* Replace incorrect `sizeof('\0')` with `sizeof("")`, see [84237ff](https://github.com/DaveGamble/cJSON/commit/84237ff48e69825c94261c624eb0376d0c328139) |
|||
* Add caveats section to the README, see [50b3c30](https://github.com/DaveGamble/cJSON/commit/50b3c30dfa89830f8f477ce33713500740ac3b79) |
|||
* Make cJSON locale independent, see [#146](https://github.com/DaveGamble/cJSON/pull/146), Thanks @peterh for reporting |
|||
* Fix compiling without CMake with MSVC, see [#147](https://github.com/DaveGamble/cJSON/pull/147), Thanks @dertuxmalwieder for reporting |
|||
|
|||
1.4.5 (Mar 28, 2017) |
|||
===== |
|||
Fixes: |
|||
------ |
|||
* Fix bug in `cJSON_SetNumberHelper`, thanks @mmkeeper, see [#138](https://github.com/DaveGamble/cJSON/issues/138) and [ef34500](https://github.com/DaveGamble/cJSON/commit/ef34500693e8c4a2849d41a4bd66fd19c9ec46c2) |
|||
* Workaround for internal compiler error in GCC 5.4.0 and 6.3.1 on x86 (2f65e80a3471d053fdc3f8aed23d01dd1782a5cb [GCC bugreport](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=80097)) |
|||
|
|||
1.4.4 (Mar 24, 2017) |
|||
===== |
|||
Fixes: |
|||
------ |
|||
* Fix a theoretical integer overflow, (not sure if it is possible on actual hardware), see [e58f7ec](https://github.com/DaveGamble/cJSON/commit/e58f7ec027d00b7cdcbf63e518c1b5268b29b3da) |
|||
* Fix an off by one error, see [cc84a44](https://github.com/DaveGamble/cJSON/commit/cc84a446be20cc283bafdc4d94c050ba1111ac02), thanks @gatzka |
|||
* Double check the offset of the print buffer in `ensure`, see [1934059](https://github.com/DaveGamble/cJSON/commit/1934059554b9a0971e00f79e96900f422cfdd114) |
|||
|
|||
Improvements: |
|||
* Add a note in the header about required buffer size when using `cJSON_PrintPreallocated`, see [4bfb8800](https://github.com/DaveGamble/cJSON/commit/4bfb88009342fb568295a7f6dc4b7fee74fbf022) |
|||
|
|||
1.4.3 (Mar 19, 2017) |
|||
===== |
|||
Fixes: |
|||
------ |
|||
* Fix compilation of the tests on 32 bit PowerPC and potentially other systems, see [4ec6e76](https://github.com/DaveGamble/cJSON/commit/4ec6e76ea2eec16f54b58e8c95b4c734e59481e4) |
|||
* Fix compilation with old GCC compilers (4.3+ were tested), see [227d33](https://github.com/DaveGamble/cJSON/commit/227d3398d6b967879761ebe02c1b63dbd6ea6e0d), [466eb8e](https://github.com/DaveGamble/cJSON/commit/466eb8e3f8a65080f2b3ca4a79ab7b72bd539dba), see also [#126](https://github.com/DaveGamble/cJSON/issues/126) |
|||
|
|||
1.4.2 (Mar 16, 2017) |
|||
===== |
|||
Fixes: |
|||
------ |
|||
* Fix minimum required cmake version, see [30e1e7a](https://github.com/DaveGamble/cJSON/commit/30e1e7af7c63db9b55f5a3cda977a6c032f0b132) |
|||
* Fix detection of supported compiler flags, see [76e5296](https://github.com/DaveGamble/cJSON/commit/76e5296d0d05ceb3018a9901639e0e171b44a557) |
|||
* Run `cJSON_test` and `cJSON_test_utils` along with unity tests, see [c597601](https://github.com/DaveGamble/cJSON/commit/c597601cf151a757dcf800548f18034d4ddfe2cb) |
|||
|
|||
1.4.1 (Mar 16, 2017) |
|||
===== |
|||
Fixes: |
|||
------ |
|||
* Make `print_number` abort with a failure in out of memory situations, see [cf1842](https://github.com/DaveGamble/cJSON/commit/cf1842dc6f64c49451a022308b4415e4d468be0a) |
|||
|
|||
1.4.0 (Mar 4, 2017) |
|||
===== |
|||
Features |
|||
-------- |
|||
* Functions to check the type of an item, see [#120](https://github.com/DaveGamble/cJSON/pull/120) |
|||
* Use dllexport on windows and fvisibility on Unix systems for public functions, see [#116](https://github.com/DaveGamble/cJSON/pull/116), thanks @mjerris |
|||
* Remove trailing zeroes from printed numbers, see [#123](https://github.com/DaveGamble/cJSON/pull/123) |
|||
* Expose the internal boolean type `cJSON_bool` in the header, see [2d3520e](https://github.com/DaveGamble/cJSON/commit/2d3520e0b9d0eb870e8886e8a21c571eeddbb310) |
|||
|
|||
Fixes |
|||
* Fix handling of NULL pointers in `cJSON_ArrayForEach`, see [b47d0e3](https://github.com/DaveGamble/cJSON/commit/b47d0e34caaef298edfb7bd09a72cfff21d231ff) |
|||
* Make it compile with GCC 7 (fix -Wimplicit-fallthrough warning), see [9d07917](https://github.com/DaveGamble/cJSON/commit/9d07917feb1b613544a7513d19233d4c851ad7ad) |
|||
|
|||
Other Improvements |
|||
* internally use realloc if available ([#110](https://github.com/DaveGamble/cJSON/pull/110)) |
|||
* builtin support for fuzzing with [afl](http://lcamtuf.coredump.cx/afl/) ([#111](https://github.com/DaveGamble/cJSON/pull/111)) |
|||
* unit tests for the print functions ([#112](https://github.com/DaveGamble/cJSON/pull/112)) |
|||
* Always use buffered printing ([#113](https://github.com/DaveGamble/cJSON/pull/113)) |
|||
* simplify the print functions ([#114](https://github.com/DaveGamble/cJSON/pull/114)) |
|||
* Add the compiler flags `-Wdouble-conversion`, `-Wparentheses` and `-Wcomma` ([#122](https://github.com/DaveGamble/cJSON/pull/122)) |
|||
|
|||
1.3.2 (Mar 1, 2017) |
|||
===== |
|||
Fixes: |
|||
------ |
|||
* Don't build the unity library if testing is disabled, see [#121](https://github.com/DaveGamble/cJSON/pull/121). Thanks @ffontaine |
|||
|
|||
1.3.1 (Feb 27, 2017) |
|||
===== |
|||
Fixes: |
|||
------ |
|||
* Bugfix release that fixes an out of bounds read, see [#118](https://github.com/DaveGamble/cJSON/pull/118). This shouldn't have any security implications. |
|||
|
|||
1.3.0 (Feb 17, 2017) |
|||
===== |
|||
This release includes a lot of rework in the parser and includes the Cunity unit testing framework, as well as some fixes. I increased the minor version number because there were quite a lot of internal changes. |
|||
|
|||
Features: |
|||
* New type for cJSON structs: `cJSON_Invalid`, see [#108](https://github.com/DaveGamble/cJSON/pull/108) |
|||
|
|||
Fixes: |
|||
------ |
|||
* runtime checks for a lot of potential integer overflows |
|||
* fix incorrect return in cJSON_PrintBuffered [cf9d57d](https://github.com/DaveGamble/cJSON/commit/cf9d57d56cac21fc59465b8d26cf29bf6d2a87b3) |
|||
* fix several potential issues found by [Coverity](https://scan.coverity.com/projects/cjson) |
|||
* fix potentially undefined behavior when assigning big numbers to `valueint` ([41e2837](https://github.com/DaveGamble/cJSON/commit/41e2837df1b1091643aff073f2313f6ff3cc10f4)) |
|||
* Numbers exceeding `INT_MAX` or lower than `INT_MIN` will be explicitly assigned to `valueint` as `INT_MAX` and `INT_MIN` respectively (saturation on overflow). |
|||
* fix the `cJSON_SetNumberValue` macro ([87f7727](https://github.com/DaveGamble/cJSON/commit/87f77274de6b3af00fb9b9a7f3b900ef382296c2)), this slightly changes the behavior, see commit message |
|||
|
|||
Introduce unit tests |
|||
-------------------- |
|||
|
|||
* Started writing unit tests with the [Cunity](https://github.com/ThrowTheSwitch/Unity) testing framework. Currently this covers the parser functions. |
|||
|
|||
Also: |
|||
* Support for running the tests with [Valgrind](http://valgrind.org) |
|||
* Support for compiling the tests with [AddressSanitizer](https://github.com/google/sanitizers) and [UndefinedBehaviorSanitizer](https://clang.llvm.org/docs/UndefinedBehaviorSanitizer.html). |
|||
* `travis.yml` file for running unit tests on travis. (not enabled for the repository yet though [#102](https://github.com/DaveGamble/cJSON/issues/102) |
|||
|
|||
Simplifications |
|||
--------------- |
|||
|
|||
After having unit tests for the parser function in place, I started refactoring the parser functions (as well as others) and making them easier to read and maintain. |
|||
* Use `strtod` from the standard library for parsing numbers ([0747669](https://github.com/DaveGamble/cJSON/commit/074766997246481dfc72bfa78f07898a2716473f)) |
|||
* Use goto-fail in several parser functions ([#100](https://github.com/DaveGamble/cJSON/pull/100)) |
|||
* Rewrite/restructure all of the parsing functions to be easier to understand and have less code paths doing the same as another. ([#109](https://github.com/DaveGamble/cJSON/pull/109)) |
|||
* Simplify the buffer allocation strategy to always doubling the needed amount ([9f6fa94](https://github.com/DaveGamble/cJSON/commit/9f6fa94c91a87b71e4c6868dbf2ce431a48517b0)) |
|||
* Combined `cJSON_AddItemToObject` and `cJSON_AddItemToObjectCS` to one function ([cf862d](https://github.com/DaveGamble/cJSON/commit/cf862d0fed7f9407e4b046d78d3d8050d2080d12)) |
|||
|
|||
Other changes |
|||
------------- |
|||
* Prevent the usage of incompatible C and header versions via preprocessor directive ([123bb1](https://github.com/DaveGamble/cJSON/commit/123bb1af7bfae41d805337fef4b41045ef6c7d25)) |
|||
* Let CMake automatically detect compiler flags |
|||
* Add new compiler flags (`-Wundef`, `-Wswitch-default`, `-Wconversion`, `-fstack-protector-strong`) ([#98](https://github.com/DaveGamble/cJSON/pull/98)) |
|||
* Change internal sizes from `int` to `size_t` ([ecd5678](https://github.com/DaveGamble/cJSON/commit/ecd5678527a6bc422da694e5be9e9979878fe6a0)) |
|||
* Change internal strings from `char*` to `unsigned char*` ([28b9ba4](https://github.com/DaveGamble/cJSON/commit/28b9ba4334e0f7309e867e874a31f395c0ac2474)) |
|||
* Add `const` in more places |
|||
|
|||
1.2.1 (Jan 31, 2017) |
|||
===== |
|||
Fixes: |
|||
------ |
|||
* Fixes a potential null pointer dereference in cJSON_Utils, discovered using clang's static analyzer by @bnason-nf, see [#96](https://github.com/DaveGamble/cJSON/issues/96) |
|||
|
|||
1.2.0 (Jan 9, 2017) |
|||
===== |
|||
Features: |
|||
--------- |
|||
* Add a new type of cJSON item for raw JSON and support printing it. Thanks @loigu, see [#65](https://github.com/DaveGamble/cJSON/pull/65), [#90](https://github.com/DaveGamble/cJSON/pull/90) |
|||
|
|||
Fixes: |
|||
------ |
|||
* Compiler warning if const is casted away, Thanks @gatzka, see [#83](https://github.com/DaveGamble/cJSON/pull/83) |
|||
* Fix compile error with strict-overflow on PowerPC, see [#85](https://github.com/DaveGamble/cJSON/issues/85) |
|||
* Fix typo in the README, thanks @MicroJoe, see [#88](https://github.com/DaveGamble/cJSON/pull/88) |
|||
* Add compile flag for compatibility with C++ compilers |
|||
|
|||
1.1.0 (Dec 6, 2016) |
|||
===== |
|||
* Add a function `cJSON_PrintPreallocated` to print to a preallocated buffer, thanks @ChisholmKyle, see [#72](https://github.com/DaveGamble/cJSON/pull/72) |
|||
* More compiler warnings when using Clang or GCC, thanks @gatzka, see [#75](https://github.com/DaveGamble/cJSON/pull/75), [#78](https://github.com/DaveGamble/cJSON/pull/78) |
|||
* fixed a memory leak in `cJSON_Duplicate`, thanks @alperakcan, see [#81](https://github.com/DaveGamble/cJSON/pull/81) |
|||
* fix the `ENABLE_CUSTOM_COMPILER_FLAGS` cmake option |
|||
|
|||
1.0.2 (Nov 25, 2016) |
|||
===== |
|||
* Rename internal boolean type, see [#71](https://github.com/DaveGamble/cJSON/issues/71). |
|||
|
|||
1.0.1 (Nov 20, 2016) |
|||
===== |
|||
Small bugfix release. |
|||
* Fixes a bug with the use of the cJSON structs type in cJSON_Utils, see [d47339e](https://github.com/DaveGamble/cJSON/commit/d47339e2740360e6e0994527d5e4752007480f3a) |
|||
* improve code readability |
|||
* initialize all variables |
|||
|
|||
1.0.0 (Nov 17, 2016) |
|||
===== |
|||
This is the first official versioned release of cJSON. It provides an API version for the shared library and improved Makefile and CMake build files. |
@ -0,0 +1,91 @@ |
|||
Contributors |
|||
============ |
|||
|
|||
Original Author: |
|||
- [Dave Gamble](https://github.com/DaveGamble) |
|||
|
|||
Current Maintainer: |
|||
- [Max Bruckner](https://github.com/FSMaxB) |
|||
- [Alan Wang](https://github.com/Alanscut) |
|||
|
|||
Contributors: |
|||
* [Ajay Bhargav](https://github.com/ajaybhargav) |
|||
* [AlexanderVasiljev](https://github.com/AlexanderVasiljev) |
|||
* [Alper Akcan](https://github.com/alperakcan) |
|||
* [Andrew Tang](https://github.com/singku) |
|||
* [Andy](https://github.com/mlh0101) |
|||
* [Anton Sergeev](https://github.com/anton-sergeev) |
|||
* [Benbuck Nason](https://github.com/bnason-nf) |
|||
* [Bernt Johan Damslora](https://github.com/bjda) |
|||
* [Bob Kocisko](https://github.com/bobkocisko) |
|||
* [Christian Schulze](https://github.com/ChristianSch) |
|||
* [Casperinous](https://github.com/Casperinous) |
|||
* [ChenYuan](https://github.com/zjuchenyuan) |
|||
* [Debora Grosse](https://github.com/DeboraG) |
|||
* [dieyushi](https://github.com/dieyushi) |
|||
* [Dōngwén Huáng (黄东文)](https://github.com/DongwenHuang) |
|||
* [Donough Liu](https://github.com/ldm0) |
|||
* [Erez Oxman](https://github.com/erez-o) |
|||
* Eswar Yaganti |
|||
* [Evan Todd](https://github.com/etodd) |
|||
* [Fabrice Fontaine](https://github.com/ffontaine) |
|||
* Ian Mobley |
|||
* Irwan Djadjadi |
|||
* [hopper-vul](https://github.com/hopper-vul) |
|||
* [HuKeping](https://github.com/HuKeping) |
|||
* [IvanVoid](https://github.com/npi3pak) |
|||
* [Jakub Wilk](https://github.com/jwilk) |
|||
* [Jiri Zouhar](https://github.com/loigu) |
|||
* [Jonathan Fether](https://github.com/jfether) |
|||
* [Joshua Arulsamy](https://github.com/jarulsamy) |
|||
* [Julian Ste](https://github.com/julian-st) |
|||
* [Julián Vásquez](https://github.com/juvasquezg) |
|||
* [Junbo Zheng](https://github.com/Junbo-Zheng) |
|||
* [Kevin Branigan](https://github.com/kbranigan) |
|||
* [Kevin Sapper](https://github.com/sappo) |
|||
* [Kyle Chisholm](https://github.com/ChisholmKyle) |
|||
* [Linus Wallgren](https://github.com/ecksun) |
|||
* [MaxBrandtner](https://github.com/MaxBrandtner) |
|||
* [Mateusz Szafoni](https://github.com/raiden00pl) |
|||
* Mike Pontillo |
|||
* [miaoerduo](https://github.com/miaoerduo) |
|||
* [mohawk2](https://github.com/mohawk2) |
|||
* [Mike Jerris](https://github.com/mjerris) |
|||
* [Mike Robinson](https://github.com/mhrobinson) |
|||
* [Moorthy](https://github.com/moorthy-bs) |
|||
* [myd7349](https://github.com/myd7349) |
|||
* [NancyLi1013](https://github.com/NancyLi1013) |
|||
* Paulo Antonio Alvarez |
|||
* [Paweł Malowany](https://github.com/PawelMalowany) |
|||
* [Pawel Winogrodzki](https://github.com/PawelWMS) |
|||
* [prefetchnta](https://github.com/prefetchnta) |
|||
* [Rafael Leal Dias](https://github.com/rafaeldias) |
|||
* [Randy](https://github.com/randy408) |
|||
* [raiden00pl](https://github.com/raiden00pl) |
|||
* [Robin Mallinson](https://github.com/rmallins) |
|||
* [Rod Vagg](https://github.com/rvagg) |
|||
* [Roland Meertens](https://github.com/rmeertens) |
|||
* [Romain Porte](https://github.com/MicroJoe) |
|||
* [SANJEEV BA](https://github.com/basanjeev) |
|||
* [Sang-Heon Jeon](https://github.com/lntuition) |
|||
* [Sayan Bandyopadhyay](https://github.com/saynb) |
|||
* [Simon Sobisch](https://github.com/GitMensch) |
|||
* [Simon Ricaldone](https://github.com/simon-p-r) |
|||
* [Stoian Ivanov](https://github.com/sdrsdr) |
|||
* [SuperH-0630](https://github.com/SuperH-0630) |
|||
* [Square789](https://github.com/Square789) |
|||
* [Stephan Gatzka](https://github.com/gatzka) |
|||
* [Tony Langhammer](https://github.com/BigBrainAFK) |
|||
* [Vemake](https://github.com/vemakereporter) |
|||
* [Wei Tan](https://github.com/tan-wei) |
|||
* [Weston Schmidt](https://github.com/schmidtw) |
|||
* [xiaomianhehe](https://github.com/xiaomianhehe) |
|||
* [yangfl](https://github.com/yangfl) |
|||
* [yuta-oxo](https://github.com/yuta-oxo) |
|||
* [Zach Hindes](https://github.com/zhindes) |
|||
* [Zhao Zhixu](https://github.com/zhaozhixu) |
|||
* [10km](https://github.com/10km) |
|||
|
|||
And probably more people on [SourceForge](https://sourceforge.net/p/cjson/bugs/search/?q=status%3Aclosed-rejected+or+status%3Aclosed-out-of-date+or+status%3Awont-fix+or+status%3Aclosed-fixed+or+status%3Aclosed&page=0) |
|||
|
|||
Also thanks to all the people who reported bugs and suggested new features. |
@ -0,0 +1,21 @@ |
|||
MIT License |
|||
|
|||
Copyright (c) 2017 The packages repositories of RT-Thread. |
|||
|
|||
Permission is hereby granted, free of charge, to any person obtaining a copy |
|||
of this software and associated documentation files (the "Software"), to deal |
|||
in the Software without restriction, including without limitation the rights |
|||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell |
|||
copies of the Software, and to permit persons to whom the Software is |
|||
furnished to do so, subject to the following conditions: |
|||
|
|||
The above copyright notice and this permission notice shall be included in all |
|||
copies or substantial portions of the Software. |
|||
|
|||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |
|||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |
|||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE |
|||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER |
|||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, |
|||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE |
|||
SOFTWARE. |
@ -0,0 +1,12 @@ |
|||
# cJSON for RT-Thread |
|||
|
|||
[中文页](README_ZH.md) | English |
|||
|
|||
Ultralightweight JSON parser in ANSI C. |
|||
|
|||
Offical repository: https://github.com/DaveGamble/cJSON |
|||
|
|||
Maintenance: [Meco Man](https://github.com/mysterywolf) |
|||
|
|||
Homepage: https://github.com/RT-Thread-packages/cJSON |
|||
|
@ -0,0 +1,12 @@ |
|||
# cJSON for RT-Thread |
|||
|
|||
中文页 | [English](README.md) |
|||
|
|||
超轻量级的 C 语言 json 解析库 |
|||
|
|||
官方仓库:https://github.com/DaveGamble/cJSON |
|||
|
|||
|
|||
维护:[Meco Man](https://github.com/mysterywolf) |
|||
|
|||
主页:https://github.com/RT-Thread-packages/cJSON |
@ -0,0 +1,9 @@ |
|||
from building import * |
|||
|
|||
cwd = GetCurrentDir() |
|||
src = Glob('*.c') |
|||
CPPPATH = [cwd] |
|||
|
|||
group = DefineGroup('cJSON', src, depend = ['PKG_USING_CJSON'], CPPPATH = CPPPATH) |
|||
|
|||
Return('group') |
File diff suppressed because it is too large
@ -0,0 +1,300 @@ |
|||
/*
|
|||
Copyright (c) 2009-2017 Dave Gamble and cJSON contributors |
|||
|
|||
Permission is hereby granted, free of charge, to any person obtaining a copy |
|||
of this software and associated documentation files (the "Software"), to deal |
|||
in the Software without restriction, including without limitation the rights |
|||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell |
|||
copies of the Software, and to permit persons to whom the Software is |
|||
furnished to do so, subject to the following conditions: |
|||
|
|||
The above copyright notice and this permission notice shall be included in |
|||
all copies or substantial portions of the Software. |
|||
|
|||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |
|||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |
|||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE |
|||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER |
|||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, |
|||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN |
|||
THE SOFTWARE. |
|||
*/ |
|||
|
|||
#ifndef cJSON__h |
|||
#define cJSON__h |
|||
|
|||
#ifdef __cplusplus |
|||
extern "C" |
|||
{ |
|||
#endif |
|||
|
|||
#if !defined(__WINDOWS__) && (defined(WIN32) || defined(WIN64) || defined(_MSC_VER) || defined(_WIN32)) |
|||
#define __WINDOWS__ |
|||
#endif |
|||
|
|||
#ifdef __WINDOWS__ |
|||
|
|||
/* When compiling for windows, we specify a specific calling convention to avoid issues where we are being called from a project with a different default calling convention. For windows you have 3 define options:
|
|||
|
|||
CJSON_HIDE_SYMBOLS - Define this in the case where you don't want to ever dllexport symbols |
|||
CJSON_EXPORT_SYMBOLS - Define this on library build when you want to dllexport symbols (default) |
|||
CJSON_IMPORT_SYMBOLS - Define this if you want to dllimport symbol |
|||
|
|||
For *nix builds that support visibility attribute, you can define similar behavior by |
|||
|
|||
setting default visibility to hidden by adding |
|||
-fvisibility=hidden (for gcc) |
|||
or |
|||
-xldscope=hidden (for sun cc) |
|||
to CFLAGS |
|||
|
|||
then using the CJSON_API_VISIBILITY flag to "export" the same symbols the way CJSON_EXPORT_SYMBOLS does |
|||
|
|||
*/ |
|||
|
|||
#define CJSON_CDECL __cdecl |
|||
#define CJSON_STDCALL __stdcall |
|||
|
|||
/* export symbols by default, this is necessary for copy pasting the C and header file */ |
|||
#if !defined(CJSON_HIDE_SYMBOLS) && !defined(CJSON_IMPORT_SYMBOLS) && !defined(CJSON_EXPORT_SYMBOLS) |
|||
#define CJSON_EXPORT_SYMBOLS |
|||
#endif |
|||
|
|||
#if defined(CJSON_HIDE_SYMBOLS) |
|||
#define CJSON_PUBLIC(type) type CJSON_STDCALL |
|||
#elif defined(CJSON_EXPORT_SYMBOLS) |
|||
#define CJSON_PUBLIC(type) __declspec(dllexport) type CJSON_STDCALL |
|||
#elif defined(CJSON_IMPORT_SYMBOLS) |
|||
#define CJSON_PUBLIC(type) __declspec(dllimport) type CJSON_STDCALL |
|||
#endif |
|||
#else /* !__WINDOWS__ */ |
|||
#define CJSON_CDECL |
|||
#define CJSON_STDCALL |
|||
|
|||
#if (defined(__GNUC__) || defined(__SUNPRO_CC) || defined (__SUNPRO_C)) && defined(CJSON_API_VISIBILITY) |
|||
#define CJSON_PUBLIC(type) __attribute__((visibility("default"))) type |
|||
#else |
|||
#define CJSON_PUBLIC(type) type |
|||
#endif |
|||
#endif |
|||
|
|||
/* project version */ |
|||
#define CJSON_VERSION_MAJOR 1 |
|||
#define CJSON_VERSION_MINOR 7 |
|||
#define CJSON_VERSION_PATCH 17 |
|||
|
|||
#include <stddef.h> |
|||
|
|||
/* cJSON Types: */ |
|||
#define cJSON_Invalid (0) |
|||
#define cJSON_False (1 << 0) |
|||
#define cJSON_True (1 << 1) |
|||
#define cJSON_NULL (1 << 2) |
|||
#define cJSON_Number (1 << 3) |
|||
#define cJSON_String (1 << 4) |
|||
#define cJSON_Array (1 << 5) |
|||
#define cJSON_Object (1 << 6) |
|||
#define cJSON_Raw (1 << 7) /* raw json */ |
|||
|
|||
#define cJSON_IsReference 256 |
|||
#define cJSON_StringIsConst 512 |
|||
|
|||
/* The cJSON structure: */ |
|||
typedef struct cJSON |
|||
{ |
|||
/* next/prev allow you to walk array/object chains. Alternatively, use GetArraySize/GetArrayItem/GetObjectItem */ |
|||
struct cJSON *next; |
|||
struct cJSON *prev; |
|||
/* An array or object item will have a child pointer pointing to a chain of the items in the array/object. */ |
|||
struct cJSON *child; |
|||
|
|||
/* The type of the item, as above. */ |
|||
int type; |
|||
|
|||
/* The item's string, if type==cJSON_String and type == cJSON_Raw */ |
|||
char *valuestring; |
|||
/* writing to valueint is DEPRECATED, use cJSON_SetNumberValue instead */ |
|||
int valueint; |
|||
/* The item's number, if type==cJSON_Number */ |
|||
double valuedouble; |
|||
|
|||
/* The item's name string, if this item is the child of, or is in the list of subitems of an object. */ |
|||
char *string; |
|||
} cJSON; |
|||
|
|||
typedef struct cJSON_Hooks |
|||
{ |
|||
/* malloc/free are CDECL on Windows regardless of the default calling convention of the compiler, so ensure the hooks allow passing those functions directly. */ |
|||
void *(CJSON_CDECL *malloc_fn)(size_t sz); |
|||
void (CJSON_CDECL *free_fn)(void *ptr); |
|||
} cJSON_Hooks; |
|||
|
|||
typedef int cJSON_bool; |
|||
|
|||
/* Limits how deeply nested arrays/objects can be before cJSON rejects to parse them.
|
|||
* This is to prevent stack overflows. */ |
|||
#ifndef CJSON_NESTING_LIMIT |
|||
#define CJSON_NESTING_LIMIT 1000 |
|||
#endif |
|||
|
|||
/* returns the version of cJSON as a string */ |
|||
CJSON_PUBLIC(const char*) cJSON_Version(void); |
|||
|
|||
/* Supply malloc, realloc and free functions to cJSON */ |
|||
CJSON_PUBLIC(void) cJSON_InitHooks(cJSON_Hooks* hooks); |
|||
|
|||
/* Memory Management: the caller is always responsible to free the results from all variants of cJSON_Parse (with cJSON_Delete) and cJSON_Print (with stdlib free, cJSON_Hooks.free_fn, or cJSON_free as appropriate). The exception is cJSON_PrintPreallocated, where the caller has full responsibility of the buffer. */ |
|||
/* Supply a block of JSON, and this returns a cJSON object you can interrogate. */ |
|||
CJSON_PUBLIC(cJSON *) cJSON_Parse(const char *value); |
|||
CJSON_PUBLIC(cJSON *) cJSON_ParseWithLength(const char *value, size_t buffer_length); |
|||
/* ParseWithOpts allows you to require (and check) that the JSON is null terminated, and to retrieve the pointer to the final byte parsed. */ |
|||
/* If you supply a ptr in return_parse_end and parsing fails, then return_parse_end will contain a pointer to the error so will match cJSON_GetErrorPtr(). */ |
|||
CJSON_PUBLIC(cJSON *) cJSON_ParseWithOpts(const char *value, const char **return_parse_end, cJSON_bool require_null_terminated); |
|||
CJSON_PUBLIC(cJSON *) cJSON_ParseWithLengthOpts(const char *value, size_t buffer_length, const char **return_parse_end, cJSON_bool require_null_terminated); |
|||
|
|||
/* Render a cJSON entity to text for transfer/storage. */ |
|||
CJSON_PUBLIC(char *) cJSON_Print(const cJSON *item); |
|||
/* Render a cJSON entity to text for transfer/storage without any formatting. */ |
|||
CJSON_PUBLIC(char *) cJSON_PrintUnformatted(const cJSON *item); |
|||
/* Render a cJSON entity to text using a buffered strategy. prebuffer is a guess at the final size. guessing well reduces reallocation. fmt=0 gives unformatted, =1 gives formatted */ |
|||
CJSON_PUBLIC(char *) cJSON_PrintBuffered(const cJSON *item, int prebuffer, cJSON_bool fmt); |
|||
/* Render a cJSON entity to text using a buffer already allocated in memory with given length. Returns 1 on success and 0 on failure. */ |
|||
/* NOTE: cJSON is not always 100% accurate in estimating how much memory it will use, so to be safe allocate 5 bytes more than you actually need */ |
|||
CJSON_PUBLIC(cJSON_bool) cJSON_PrintPreallocated(cJSON *item, char *buffer, const int length, const cJSON_bool format); |
|||
/* Delete a cJSON entity and all subentities. */ |
|||
CJSON_PUBLIC(void) cJSON_Delete(cJSON *item); |
|||
|
|||
/* Returns the number of items in an array (or object). */ |
|||
CJSON_PUBLIC(int) cJSON_GetArraySize(const cJSON *array); |
|||
/* Retrieve item number "index" from array "array". Returns NULL if unsuccessful. */ |
|||
CJSON_PUBLIC(cJSON *) cJSON_GetArrayItem(const cJSON *array, int index); |
|||
/* Get item "string" from object. Case insensitive. */ |
|||
CJSON_PUBLIC(cJSON *) cJSON_GetObjectItem(const cJSON * const object, const char * const string); |
|||
CJSON_PUBLIC(cJSON *) cJSON_GetObjectItemCaseSensitive(const cJSON * const object, const char * const string); |
|||
CJSON_PUBLIC(cJSON_bool) cJSON_HasObjectItem(const cJSON *object, const char *string); |
|||
/* For analysing failed parses. This returns a pointer to the parse error. You'll probably need to look a few chars back to make sense of it. Defined when cJSON_Parse() returns 0. 0 when cJSON_Parse() succeeds. */ |
|||
CJSON_PUBLIC(const char *) cJSON_GetErrorPtr(void); |
|||
|
|||
/* Check item type and return its value */ |
|||
CJSON_PUBLIC(char *) cJSON_GetStringValue(const cJSON * const item); |
|||
CJSON_PUBLIC(double) cJSON_GetNumberValue(const cJSON * const item); |
|||
|
|||
/* These functions check the type of an item */ |
|||
CJSON_PUBLIC(cJSON_bool) cJSON_IsInvalid(const cJSON * const item); |
|||
CJSON_PUBLIC(cJSON_bool) cJSON_IsFalse(const cJSON * const item); |
|||
CJSON_PUBLIC(cJSON_bool) cJSON_IsTrue(const cJSON * const item); |
|||
CJSON_PUBLIC(cJSON_bool) cJSON_IsBool(const cJSON * const item); |
|||
CJSON_PUBLIC(cJSON_bool) cJSON_IsNull(const cJSON * const item); |
|||
CJSON_PUBLIC(cJSON_bool) cJSON_IsNumber(const cJSON * const item); |
|||
CJSON_PUBLIC(cJSON_bool) cJSON_IsString(const cJSON * const item); |
|||
CJSON_PUBLIC(cJSON_bool) cJSON_IsArray(const cJSON * const item); |
|||
CJSON_PUBLIC(cJSON_bool) cJSON_IsObject(const cJSON * const item); |
|||
CJSON_PUBLIC(cJSON_bool) cJSON_IsRaw(const cJSON * const item); |
|||
|
|||
/* These calls create a cJSON item of the appropriate type. */ |
|||
CJSON_PUBLIC(cJSON *) cJSON_CreateNull(void); |
|||
CJSON_PUBLIC(cJSON *) cJSON_CreateTrue(void); |
|||
CJSON_PUBLIC(cJSON *) cJSON_CreateFalse(void); |
|||
CJSON_PUBLIC(cJSON *) cJSON_CreateBool(cJSON_bool boolean); |
|||
CJSON_PUBLIC(cJSON *) cJSON_CreateNumber(double num); |
|||
CJSON_PUBLIC(cJSON *) cJSON_CreateString(const char *string); |
|||
/* raw json */ |
|||
CJSON_PUBLIC(cJSON *) cJSON_CreateRaw(const char *raw); |
|||
CJSON_PUBLIC(cJSON *) cJSON_CreateArray(void); |
|||
CJSON_PUBLIC(cJSON *) cJSON_CreateObject(void); |
|||
|
|||
/* Create a string where valuestring references a string so
|
|||
* it will not be freed by cJSON_Delete */ |
|||
CJSON_PUBLIC(cJSON *) cJSON_CreateStringReference(const char *string); |
|||
/* Create an object/array that only references it's elements so
|
|||
* they will not be freed by cJSON_Delete */ |
|||
CJSON_PUBLIC(cJSON *) cJSON_CreateObjectReference(const cJSON *child); |
|||
CJSON_PUBLIC(cJSON *) cJSON_CreateArrayReference(const cJSON *child); |
|||
|
|||
/* These utilities create an Array of count items.
|
|||
* The parameter count cannot be greater than the number of elements in the number array, otherwise array access will be out of bounds.*/ |
|||
CJSON_PUBLIC(cJSON *) cJSON_CreateIntArray(const int *numbers, int count); |
|||
CJSON_PUBLIC(cJSON *) cJSON_CreateFloatArray(const float *numbers, int count); |
|||
CJSON_PUBLIC(cJSON *) cJSON_CreateDoubleArray(const double *numbers, int count); |
|||
CJSON_PUBLIC(cJSON *) cJSON_CreateStringArray(const char *const *strings, int count); |
|||
|
|||
/* Append item to the specified array/object. */ |
|||
CJSON_PUBLIC(cJSON_bool) cJSON_AddItemToArray(cJSON *array, cJSON *item); |
|||
CJSON_PUBLIC(cJSON_bool) cJSON_AddItemToObject(cJSON *object, const char *string, cJSON *item); |
|||
/* Use this when string is definitely const (i.e. a literal, or as good as), and will definitely survive the cJSON object.
|
|||
* WARNING: When this function was used, make sure to always check that (item->type & cJSON_StringIsConst) is zero before |
|||
* writing to `item->string` */ |
|||
CJSON_PUBLIC(cJSON_bool) cJSON_AddItemToObjectCS(cJSON *object, const char *string, cJSON *item); |
|||
/* Append reference to item to the specified array/object. Use this when you want to add an existing cJSON to a new cJSON, but don't want to corrupt your existing cJSON. */ |
|||
CJSON_PUBLIC(cJSON_bool) cJSON_AddItemReferenceToArray(cJSON *array, cJSON *item); |
|||
CJSON_PUBLIC(cJSON_bool) cJSON_AddItemReferenceToObject(cJSON *object, const char *string, cJSON *item); |
|||
|
|||
/* Remove/Detach items from Arrays/Objects. */ |
|||
CJSON_PUBLIC(cJSON *) cJSON_DetachItemViaPointer(cJSON *parent, cJSON * const item); |
|||
CJSON_PUBLIC(cJSON *) cJSON_DetachItemFromArray(cJSON *array, int which); |
|||
CJSON_PUBLIC(void) cJSON_DeleteItemFromArray(cJSON *array, int which); |
|||
CJSON_PUBLIC(cJSON *) cJSON_DetachItemFromObject(cJSON *object, const char *string); |
|||
CJSON_PUBLIC(cJSON *) cJSON_DetachItemFromObjectCaseSensitive(cJSON *object, const char *string); |
|||
CJSON_PUBLIC(void) cJSON_DeleteItemFromObject(cJSON *object, const char *string); |
|||
CJSON_PUBLIC(void) cJSON_DeleteItemFromObjectCaseSensitive(cJSON *object, const char *string); |
|||
|
|||
/* Update array items. */ |
|||
CJSON_PUBLIC(cJSON_bool) cJSON_InsertItemInArray(cJSON *array, int which, cJSON *newitem); /* Shifts pre-existing items to the right. */ |
|||
CJSON_PUBLIC(cJSON_bool) cJSON_ReplaceItemViaPointer(cJSON * const parent, cJSON * const item, cJSON * replacement); |
|||
CJSON_PUBLIC(cJSON_bool) cJSON_ReplaceItemInArray(cJSON *array, int which, cJSON *newitem); |
|||
CJSON_PUBLIC(cJSON_bool) cJSON_ReplaceItemInObject(cJSON *object,const char *string,cJSON *newitem); |
|||
CJSON_PUBLIC(cJSON_bool) cJSON_ReplaceItemInObjectCaseSensitive(cJSON *object,const char *string,cJSON *newitem); |
|||
|
|||
/* Duplicate a cJSON item */ |
|||
CJSON_PUBLIC(cJSON *) cJSON_Duplicate(const cJSON *item, cJSON_bool recurse); |
|||
/* Duplicate will create a new, identical cJSON item to the one you pass, in new memory that will
|
|||
* need to be released. With recurse!=0, it will duplicate any children connected to the item. |
|||
* The item->next and ->prev pointers are always zero on return from Duplicate. */ |
|||
/* Recursively compare two cJSON items for equality. If either a or b is NULL or invalid, they will be considered unequal.
|
|||
* case_sensitive determines if object keys are treated case sensitive (1) or case insensitive (0) */ |
|||
CJSON_PUBLIC(cJSON_bool) cJSON_Compare(const cJSON * const a, const cJSON * const b, const cJSON_bool case_sensitive); |
|||
|
|||
/* Minify a strings, remove blank characters(such as ' ', '\t', '\r', '\n') from strings.
|
|||
* The input pointer json cannot point to a read-only address area, such as a string constant, |
|||
* but should point to a readable and writable address area. */ |
|||
CJSON_PUBLIC(void) cJSON_Minify(char *json); |
|||
|
|||
/* Helper functions for creating and adding items to an object at the same time.
|
|||
* They return the added item or NULL on failure. */ |
|||
CJSON_PUBLIC(cJSON*) cJSON_AddNullToObject(cJSON * const object, const char * const name); |
|||
CJSON_PUBLIC(cJSON*) cJSON_AddTrueToObject(cJSON * const object, const char * const name); |
|||
CJSON_PUBLIC(cJSON*) cJSON_AddFalseToObject(cJSON * const object, const char * const name); |
|||
CJSON_PUBLIC(cJSON*) cJSON_AddBoolToObject(cJSON * const object, const char * const name, const cJSON_bool boolean); |
|||
CJSON_PUBLIC(cJSON*) cJSON_AddNumberToObject(cJSON * const object, const char * const name, const double number); |
|||
CJSON_PUBLIC(cJSON*) cJSON_AddStringToObject(cJSON * const object, const char * const name, const char * const string); |
|||
CJSON_PUBLIC(cJSON*) cJSON_AddRawToObject(cJSON * const object, const char * const name, const char * const raw); |
|||
CJSON_PUBLIC(cJSON*) cJSON_AddObjectToObject(cJSON * const object, const char * const name); |
|||
CJSON_PUBLIC(cJSON*) cJSON_AddArrayToObject(cJSON * const object, const char * const name); |
|||
|
|||
/* When assigning an integer value, it needs to be propagated to valuedouble too. */ |
|||
#define cJSON_SetIntValue(object, number) ((object) ? (object)->valueint = (object)->valuedouble = (number) : (number)) |
|||
/* helper for the cJSON_SetNumberValue macro */ |
|||
CJSON_PUBLIC(double) cJSON_SetNumberHelper(cJSON *object, double number); |
|||
#define cJSON_SetNumberValue(object, number) ((object != NULL) ? cJSON_SetNumberHelper(object, (double)number) : (number)) |
|||
/* Change the valuestring of a cJSON_String object, only takes effect when type of object is cJSON_String */ |
|||
CJSON_PUBLIC(char*) cJSON_SetValuestring(cJSON *object, const char *valuestring); |
|||
|
|||
/* If the object is not a boolean type this does nothing and returns cJSON_Invalid else it returns the new type*/ |
|||
#define cJSON_SetBoolValue(object, boolValue) ( \ |
|||
(object != NULL && ((object)->type & (cJSON_False|cJSON_True))) ? \ |
|||
(object)->type=((object)->type &(~(cJSON_False|cJSON_True)))|((boolValue)?cJSON_True:cJSON_False) : \ |
|||
cJSON_Invalid\ |
|||
) |
|||
|
|||
/* Macro for iterating over an array or object */ |
|||
#define cJSON_ArrayForEach(element, array) for(element = (array != NULL) ? (array)->child : NULL; element != NULL; element = element->next) |
|||
|
|||
/* malloc/free objects using the malloc/free functions that have been set with cJSON_InitHooks */ |
|||
CJSON_PUBLIC(void *) cJSON_malloc(size_t size); |
|||
CJSON_PUBLIC(void) cJSON_free(void *object); |
|||
|
|||
#ifdef __cplusplus |
|||
} |
|||
#endif |
|||
|
|||
#endif |
File diff suppressed because it is too large
@ -0,0 +1,88 @@ |
|||
/*
|
|||
Copyright (c) 2009-2017 Dave Gamble and cJSON contributors |
|||
|
|||
Permission is hereby granted, free of charge, to any person obtaining a copy |
|||
of this software and associated documentation files (the "Software"), to deal |
|||
in the Software without restriction, including without limitation the rights |
|||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell |
|||
copies of the Software, and to permit persons to whom the Software is |
|||
furnished to do so, subject to the following conditions: |
|||
|
|||
The above copyright notice and this permission notice shall be included in |
|||
all copies or substantial portions of the Software. |
|||
|
|||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |
|||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |
|||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE |
|||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER |
|||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, |
|||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN |
|||
THE SOFTWARE. |
|||
*/ |
|||
|
|||
#ifndef cJSON_Utils__h |
|||
#define cJSON_Utils__h |
|||
|
|||
#ifdef __cplusplus |
|||
extern "C" |
|||
{ |
|||
#endif |
|||
|
|||
#include "cJSON.h" |
|||
|
|||
/* Implement RFC6901 (https://tools.ietf.org/html/rfc6901) JSON Pointer spec. */ |
|||
CJSON_PUBLIC(cJSON *) cJSONUtils_GetPointer(cJSON * const object, const char *pointer); |
|||
CJSON_PUBLIC(cJSON *) cJSONUtils_GetPointerCaseSensitive(cJSON * const object, const char *pointer); |
|||
|
|||
/* Implement RFC6902 (https://tools.ietf.org/html/rfc6902) JSON Patch spec. */ |
|||
/* NOTE: This modifies objects in 'from' and 'to' by sorting the elements by their key */ |
|||
CJSON_PUBLIC(cJSON *) cJSONUtils_GeneratePatches(cJSON * const from, cJSON * const to); |
|||
CJSON_PUBLIC(cJSON *) cJSONUtils_GeneratePatchesCaseSensitive(cJSON * const from, cJSON * const to); |
|||
/* Utility for generating patch array entries. */ |
|||
CJSON_PUBLIC(void) cJSONUtils_AddPatchToArray(cJSON * const array, const char * const operation, const char * const path, const cJSON * const value); |
|||
/* Returns 0 for success. */ |
|||
CJSON_PUBLIC(int) cJSONUtils_ApplyPatches(cJSON * const object, const cJSON * const patches); |
|||
CJSON_PUBLIC(int) cJSONUtils_ApplyPatchesCaseSensitive(cJSON * const object, const cJSON * const patches); |
|||
|
|||
/*
|
|||
// Note that ApplyPatches is NOT atomic on failure. To implement an atomic ApplyPatches, use:
|
|||
//int cJSONUtils_AtomicApplyPatches(cJSON **object, cJSON *patches)
|
|||
//{
|
|||
// cJSON *modme = cJSON_Duplicate(*object, 1);
|
|||
// int error = cJSONUtils_ApplyPatches(modme, patches);
|
|||
// if (!error)
|
|||
// {
|
|||
// cJSON_Delete(*object);
|
|||
// *object = modme;
|
|||
// }
|
|||
// else
|
|||
// {
|
|||
// cJSON_Delete(modme);
|
|||
// }
|
|||
//
|
|||
// return error;
|
|||
//}
|
|||
// Code not added to library since this strategy is a LOT slower.
|
|||
*/ |
|||
|
|||
/* Implement RFC7386 (https://tools.ietf.org/html/rfc7396) JSON Merge Patch spec. */ |
|||
/* target will be modified by patch. return value is new ptr for target. */ |
|||
CJSON_PUBLIC(cJSON *) cJSONUtils_MergePatch(cJSON *target, const cJSON * const patch); |
|||
CJSON_PUBLIC(cJSON *) cJSONUtils_MergePatchCaseSensitive(cJSON *target, const cJSON * const patch); |
|||
/* generates a patch to move from -> to */ |
|||
/* NOTE: This modifies objects in 'from' and 'to' by sorting the elements by their key */ |
|||
CJSON_PUBLIC(cJSON *) cJSONUtils_GenerateMergePatch(cJSON * const from, cJSON * const to); |
|||
CJSON_PUBLIC(cJSON *) cJSONUtils_GenerateMergePatchCaseSensitive(cJSON * const from, cJSON * const to); |
|||
|
|||
/* Given a root object and a target object, construct a pointer from one to the other. */ |
|||
CJSON_PUBLIC(char *) cJSONUtils_FindPointerFromObjectTo(const cJSON * const object, const cJSON * const target); |
|||
|
|||
/* Sorts the members of the object into alphabetical order. */ |
|||
CJSON_PUBLIC(void) cJSONUtils_SortObject(cJSON * const object); |
|||
CJSON_PUBLIC(void) cJSONUtils_SortObjectCaseSensitive(cJSON * const object); |
|||
|
|||
#ifdef __cplusplus |
|||
} |
|||
#endif |
|||
|
|||
#endif |
@ -0,0 +1 @@ |
|||
#include "cJSON_Utils.h" |
Binary file not shown.
Loading…
Reference in new issue