Commit Graph

451 Commits

Author SHA1 Message Date
Max Bruckner 748f4bfd4f print_object: return boolean instead of pointer 2017-03-03 00:21:34 +01:00
Max Bruckner bea1d102fd print_array: return boolean instead of pointer 2017-03-03 00:16:54 +01:00
Max Bruckner d441fa05b3 print_value: return boolean instead of pointer 2017-03-03 00:11:43 +01:00
Max Bruckner d8d0ae66d3 print_number: Fix incorrect output pointer 2017-03-02 23:57:01 +01:00
Max Bruckner 9d07917feb utf16_literal_to_utf8: Eliminate Duff's Device
This fixes -Wimplicit-fallthrough warnings with GCC7.
2017-03-02 13:46:31 +01:00
Max Bruckner 6405fd15e3 CMake: Set default visibility to hidden and dllexport on windows 2017-03-01 23:19:35 +01:00
Max Bruckner 2d3520e0b9 Use own cJSON_bool boolean type in the header 2017-03-01 22:50:12 +01:00
Max Bruckner 412f4f7d62 Use CJSON_PUBLIC for typecheck functions 2017-03-01 22:47:45 +01:00
Max Bruckner dd4cb5400f print_number: Remove unnecessary integer handling 2017-03-01 13:28:27 +01:00
Max Bruckner 1ea72f8260 print_number: Remove trailing zeroes (for doubles) 2017-03-01 13:22:32 +01:00
Max Bruckner e78bc42362 print_number: Return buffer + offset instead of beginning of the number 2017-03-01 13:00:52 +01:00
Max Bruckner 6f271e511f print_number: Use sprintf's return value
This is used to update the buffer offset and determine success
2017-03-01 12:56:32 +01:00
Max Bruckner 3f349a4258 Add -Wdouble-promotion compiler flag 2017-03-01 11:57:07 +01:00
Max Bruckner b056d7cb74 Add -Wcomma compiler flag 2017-03-01 11:57:06 +01:00
Max Bruckner c66d95d116 Release bugfix release 1.3.2 2017-02-28 21:43:02 +01:00
Max Bruckner 024f690289 Merge pull request #116 from mjerris/fschanges
add CJSON_DECLARE macros to support gcc visibility and windows dllexport
2017-02-27 21:51:55 +01:00
Mike Jerris 039b1cc653 add CJSON_PUBLIC macro to public functions to support visibility and dllimport/dllexport 2017-02-27 13:47:06 -06:00
Max Bruckner c0ff1fef9b Release 1.3.1 2017-02-26 22:04:22 +01:00
Max Bruckner c26d53f0d7 Helper function to check the type of an item
This is necessary, because you can get it wrong if you do it manually.
(when you forget the & 0xFF in the comparison)
2017-02-26 14:30:50 +01:00
Mike Jerris 72e6e23523 prevent read beyond end of buffer when string ends with malformed utf 2017-02-23 08:59:25 -06:00
Max Bruckner 501046247d fix clang-sanitizer warnings 2017-02-21 15:08:36 +01:00
Max Bruckner 68cd0d4a11 cJSON.c: Pass allocation functions through internal functions
This is the first step in removing the global allocator functions. Every
internal function now only accesses its locally available set of
allocators.
2017-02-21 14:50:49 +01:00
Max Bruckner 605422c60a cJSON: New function cJSON_GetObjectItemCaseSensitive 2017-02-21 11:17:08 +01:00
Max Bruckner 1d42c9bc60 print_object: simplify code 2017-02-20 23:07:24 +01:00
Max Bruckner b71db93e03 print_object: rename variables 2017-02-20 23:07:24 +01:00
Max Bruckner 6d5a7c8c40 print_array: simplify code 2017-02-20 23:07:24 +01:00
Max Bruckner 8c1ed3ab82 update: rename to update_offset and change offset directly 2017-02-20 23:07:24 +01:00
Max Bruckner f16dd7e028 print_array: rename variables 2017-02-20 23:07:24 +01:00
Max Bruckner 08770fc246 print_value: rename variables 2017-02-20 23:07:23 +01:00
Max Bruckner 0ca8587acc print_string_ptr: simplify code 2017-02-20 23:07:23 +01:00
Max Bruckner 6a746a230a print_string: Add more const 2017-02-20 23:07:23 +01:00
Max Bruckner 1e999352d3 print_string_ptr: rename variables 2017-02-20 23:07:23 +01:00
Max Bruckner 6815d96617 print_number: rename variables 2017-02-20 23:07:22 +01:00
Max Bruckner 61921498d0 print_number: remove special case for 0
Now that printbuffer is used for everything, it's not needed anymore.
2017-02-20 23:07:22 +01:00
Max Bruckner 3c4d309f62 ensure: Don't accept empty printbuffers anymore 2017-02-19 04:20:21 +01:00
Max Bruckner 9bf531ca05 Remove printing without buffer 2017-02-19 04:16:57 +01:00
Max Bruckner 80354bdb06 cJSON_Print: Use printbuffer 2017-02-19 04:03:02 +01:00
Max Bruckner 331c18d09a ensure: only memcopy what's necessary
We don't need to copy the entire printbuffer, only the part that is
used.
2017-02-18 12:07:17 +01:00
Max Bruckner 4fff92140e ensure: use realloc if possible 2017-02-18 12:07:17 +01:00
Max Bruckner fc1d4b07df ensure: if printbuffer is null: cJSON_malloc
This allowed for the removal of a lot of if (p) checks.
2017-02-18 11:35:59 +01:00
Max Bruckner bd073343fa rename skip -> skip_whitespace 2017-02-17 19:37:31 +01:00
Max Bruckner 4fce9cce86 Release version 1.3.0 2017-02-17 01:42:02 +01:00
Max Bruckner b41264d164 Remove uint8_t because it's not part of C89 2017-02-16 21:22:43 +01:00
Max Bruckner 0f271dcf63 parse_hex4: make input pointer const 2017-02-16 21:02:26 +01:00
Max Bruckner ead389aba2 parse_value: improve variable names + const correctness 2017-02-16 21:02:25 +01:00
Max Bruckner 698dc528f4 parse_object: improve variable names + const correctness 2017-02-16 21:02:25 +01:00
Max Bruckner 3dc6339025 parse_array: improve variable names + const correctness 2017-02-16 20:08:59 +01:00
Max Bruckner 15592c50f6 parse_number: improve variable names + const correctness 2017-02-16 20:02:18 +01:00
Max Bruckner efb5e1bc93 parse_string: Improve const correctnes of pointers 2017-02-16 20:00:12 +01:00
Max Bruckner ace5047782 parse_string: reduce mental burden when reading the code
This restructures parse_string in a way, that you need to keep less
state in your head to understand the code.

This is achieved by:
* only changing the input pointer (current position) at a few places
(not all throughout)
* splitting out the UTF16 handling into a separate function
* renaming the variables so you know what they do without additional
context
2017-02-16 19:49:03 +01:00
Max Bruckner 03f23738bb parse_object: simplify to one do-while loop 2017-02-16 19:49:02 +01:00
Max Bruckner 24dbf29360 parse_array: simplify to one do-while loop 2017-02-16 19:49:02 +01:00
Max Bruckner 12b2daccf3 parse_{object,array}: set child only after parsing
This only attaches the parsed linked lists to the items passed to
parse_object and parse_array.
2017-02-16 01:03:43 +01:00
Max Bruckner f8d0c47bdb Remove unnecessary assignment and silence clang analyzer 2017-02-16 00:31:57 +01:00
Max Bruckner 9f6fa94c91 ensure: replace pow2gt with multiplication by two
This replaces the bit fiddling involved with calculating a new buffer
size by just multiplying the required length by two, paving the way to a
complete switch to size_t at a later point in time.
2017-02-16 00:23:38 +01:00
Max Bruckner 123bb1af7b cJSON: prevent incompatible C and header versions
Introduces a preprocessor directive that aborts the compilation if the
version numbers in the header don't match with the numbers in the c
file.
2017-02-15 23:21:50 +01:00
Max Bruckner cf862d0fed implement AddItemToObject using AddItemToObjectCS 2017-02-15 21:46:24 +01:00
Max Bruckner 3facca4792 parse functions: Only set type after successful
This sets the type of an item only if parsing was successful.

This means that in case of failure, the item's type will remain to be
cJSON_Invalid.
2017-02-15 21:25:48 +01:00
Max Bruckner 702fd95af3 fix #106: potentially invalid free in cJSON_AddItemToObject 2017-02-15 20:45:23 +01:00
Max Bruckner 94117a5d23 Fix #105, double free when parse_string fails
This fixes a double free that happens when calling cJSON_Delete on an
item that has been used by parse_string and it failed parsing the
string.

The double free happens, because parse_string frees an alias of
item->valuestring, but doesn't set item->valuestring to NULL.
2017-02-15 15:37:38 +01:00
Max Bruckner 4047de4f6e fix potential NULL dereferences found by coverity 2017-02-08 03:00:44 +01:00
Max Bruckner 87f77274de cJSON_SetNumberValue: Fix undefined double to int conversion
This might cause slight changes in behavior, but it shouldn't break
anything that is not already broken (for example the original macro
could either return a double, or an integer or whatever depending on if
object is NULL or not.)
2017-02-07 21:23:36 +01:00
Max Bruckner dded751757 parse_string: remove useless first byte marks for utf8 2017-02-07 21:23:36 +01:00
Max Bruckner d7b5545748 parse_hex4: deduplicate into a for loop 2017-02-07 21:23:36 +01:00
Max Bruckner 0747669972 parse_number: Switch to C library's strtod
Replaces the hand written floating point parser with the C library
implementation.
2017-02-07 21:23:36 +01:00
Max Bruckner cc514583cc cJSON_Duplicate: goto fail error handling
Simplify error handling using goto fail and improve some names.
2017-02-07 20:59:55 +01:00
Max Bruckner 021b174ee1 parse_object: goto fail error handling
Makes the control flow easier to reason about and fixes a few potential
memory leaks.
2017-02-07 20:59:55 +01:00
Max Bruckner 99cd9af7d5 parse_array: goto fail error handling
Makes the control flow easier to reason about and fixes a few potential
memory leaks.
2017-02-07 20:59:55 +01:00
Max Bruckner 8656386c4f parse_string: goto fail error handling
Makes the control flow easier to reason about and fixes a few potential
memory leaks.
2017-02-07 20:59:55 +01:00
Max Bruckner 9ed906758e fix null pointer dereferences found by coverity 2017-02-07 19:07:18 +01:00
Max Bruckner ee0c920dff fix: add break in UTF-16 handling
Introducing the switch defaults in an earlier commit made UTF-16 \u
sequence handling broken.
2017-02-04 01:54:56 +01:00
Max Bruckner af6d5d3d7c Add more consts to unsigned chars 2017-02-03 22:41:14 +01:00
Max Bruckner cf9d57d56c Fix incorrect return 2017-02-03 20:34:37 +01:00
Max Bruckner 3d3bfc6a4d Compiler flag -Wconversion
Makes type conversions explicit, if they alter a value
2017-02-03 18:36:13 +01:00
Max Bruckner 41e2837df1 Fix potentially undefined behavior when filling valueint
If the number is bigger or smaller than the biggest or smallest integer,
the behavior would be undefined.

This commit defines it as saturation behavior.
2017-02-03 18:36:13 +01:00
Max Bruckner ecd5678527 Change all internal sizes to size_t 2017-02-03 18:36:12 +01:00
Max Bruckner 28b9ba4334 Change all internal strings to unsigned char* 2017-02-03 15:59:00 +01:00
Max Bruckner b182ced1d6 Compiler flag -Wswitch-default + add defaults 2017-02-03 12:21:36 +01:00
Max Bruckner fe18403935 Compiler flag -Wundef + fix incorrect macro 2017-02-03 12:14:50 +01:00
Max Bruckner c49ffbfba8 cJSON_Version: returns a version string
This is useful to programmatically find out the version of cJSON that
has been used (useful in case of scripting language bindings for
example).
2017-01-12 20:37:29 +01:00
Max Bruckner e3e0b5150b cJSON_CreateRaw: Format fixes 2017-01-05 21:33:52 +01:00
Max Bruckner 1df987a170 cJSON_strdup: Check for NULL string 2017-01-05 21:31:17 +01:00
Max Bruckner ddadb44a67 cJSON_Raw: Additional checks in print_value 2017-01-05 21:30:37 +01:00
Max Bruckner 8c58e62597 Merge remote-tracking branch 'loigu/master' into cJSON_Raw 2017-01-05 21:07:08 +01:00
Max Bruckner fcc89c4bb2 Move increment out of loop condition fixes #85 2016-12-15 11:12:42 +01:00
Stephan e69db83de5 Temporarily disable warning when const is cast away.
There was a long running discussion here
https://github.com/DaveGamble/cJSON/pull/80 how to provide const
correctness for users of cJSON.

To avoid breaking changes for users of cJSON v1 it was decided to
disable this warning.

pragma was tested with gcc 5.4.0/6.2.1 and clang 3.8/3.9.
2016-12-08 13:21:18 +01:00
Alper Akcan 5b4420298f fix memory leak in cJSON_Duplicate 2016-12-05 14:23:04 +03:00
Max Bruckner bf17703012 Merge branch 'print_preallocated' 2016-11-28 23:08:25 +07:00
Max Bruckner 6622c54f18 Handle out of memory when printing string 2016-11-28 23:06:38 +07:00
Kyle Chisholm 8df4cd46eb more concise return 2016-11-28 22:59:55 +07:00
Kyle Chisholm 4d1dcaa160 check print_value return 2016-11-28 22:59:54 +07:00
Kyle Chisholm de93d76d0b changed to cJSON_PrintPreallocated, added flag in printbuffer 2016-11-28 22:59:53 +07:00
Kyle Chisholm 23dafa4739 added Print function call for pre-allocated buffer 2016-11-28 22:53:33 +07:00
Stephan 038b04d80a Take out len from condition check.
Otherwise, the check is just undefined behaviour. gcc even takes out
this check because len can never be zero if len does not wrap around.

Found with -Wstrict-overflow=2
2016-11-28 09:11:14 +01:00
Max Bruckner 23b269d5f9 Rename bool -> cjbool, fix #71 2016-11-25 08:19:18 +07:00
Max Bruckner 679004914f Define a boolean type
This is not changing the behavior of the code, but it is improving the
readability and helps to make the intention clearer.

One thing to take care: 'true' should never be compared against.
2016-11-19 17:29:22 +07:00
Max Bruckner b88da9b0de Initialize all variables 2016-11-19 17:29:21 +07:00
Max Bruckner a5ff796c20 Replace 0 with more expressive NULL or '\0' 2016-11-19 17:28:14 +07:00
Max Bruckner dc4b62915a fix #10, now failing on incorrect escape sequences 2016-11-14 19:33:03 +07:00
Max Bruckner afd690d1c9 format fix 2016-11-14 19:14:14 +07:00
Jiri Zouhar 06008b0444 add support to insert raw json 2016-11-14 11:20:10 +01:00
Max Bruckner 0d10e279c8 fix #55 memory leak in cJSON_ReplaceItemInObject 2016-11-11 11:53:14 +07:00
Max Bruckner a148520ffb Revert "Fix #26: Use long double literal for 1e60"
This reverts commit 3ea491c0a6.
2016-11-08 00:53:16 +07:00
Max Bruckner b4d728d018 pow2gt: Detect integer size fix #27 2016-11-07 20:09:58 +07:00
Max Bruckner 3ea491c0a6 Fix #26: Use long double literal for 1e60
Big thanks at mvollmer (https://sourceforge.net/p/cjson/bugs/45/)
2016-11-05 21:26:18 +07:00
Max Bruckner 4d06882c68 Merge pull request #44 from iMobs/arm_compilation
ARM Compilation
2016-11-01 08:42:45 +07:00
Rod Vagg 5323f558cd don't ignore malloc failure in cJSON_PrintBuffered 2016-10-31 10:54:34 +11:00
Max Bruckner a1c022fef6 Merge pull request #37 from DaveGamble/reformatting
Reformat cJSON_Utils.c and test.c
2016-10-29 22:52:55 +07:00
Max Bruckner ddeca82718 reformatting: cJSON.c: fix indentation 2016-10-29 22:44:45 +07:00
Jonathan Fether 9f00ff9a91 Remove redundant test from cJSON_AddItemToArray
The test for whether "c" is null is redundant.  Since this is the else case of "(!c)", and the only way "c" is changed is by the instruction assigning it "c->next" on the condition here, simply verifying that "c->next" isn't null is sufficient.
2016-10-27 20:02:44 -07:00
Ian Mobley d4836effc9 Fix compiler warning "array subscript has type char" when using arm-none-eabi-gcc 2016-10-17 17:20:57 -07:00
Ian Mobley b393b3beeb Add const qualifier for non-destructive functions
Functions like cJSON_Print do not and should not modify the object passed
to them.
2016-10-07 15:42:11 -07:00
Max Bruckner 34388c2d4c reformatting: cJSON_Minify 2016-10-02 19:04:30 +07:00
Max Bruckner 9adc6e7fe1 reformatting: cJSON_Duplicate 2016-10-02 19:04:30 +07:00
Max Bruckner e6fd236f00 reformatting: cJSON_CreateStringArray 2016-10-02 19:04:29 +07:00
Max Bruckner e272f7285e reformatting: cJSON_CreateDoubleArray 2016-10-02 19:04:29 +07:00
Max Bruckner 890b999e59 reformatting cJSON_CreateFloatArray 2016-10-02 19:04:29 +07:00
Max Bruckner f831aef5c1 reformatting: cJSON_CreateIntArray 2016-10-02 19:04:28 +07:00
Max Bruckner 21a0a88f19 reformatting: cJSON_CreateObject 2016-10-02 19:04:28 +07:00
Max Bruckner e241081020 reformatting: cJSON_CreateArray 2016-10-02 19:04:28 +07:00
Max Bruckner 034003ce2b reformatting: cJSON_CreateString 2016-10-02 19:04:28 +07:00
Max Bruckner 3f9f4970b4 reformatting: cJSON_CreateNumber 2016-10-02 19:04:27 +07:00
Max Bruckner 99f61f2b35 reformatting: cJSON_CreateBool 2016-10-02 19:04:27 +07:00
Max Bruckner a0b5d6b13a reformatting: cJSON_CreateFalse 2016-10-02 19:04:27 +07:00
Max Bruckner fdfb9fff86 reformatting: cJSON_CreateTrue 2016-10-02 19:04:27 +07:00
Max Bruckner cf7835b67d reformatting: cJSON_CreateNull 2016-10-02 19:04:26 +07:00
Max Bruckner 3a8043273e reformatting: cJSON_ReplaceItemInObject 2016-10-02 19:04:26 +07:00
Max Bruckner dc8eb30467 reformatting: cJSON_ReplaceItemInArray 2016-10-02 19:04:26 +07:00
Max Bruckner 69dcfcf238 reformatting: cJSON_InsertItemInArray 2016-10-02 19:04:26 +07:00
Max Bruckner 207bb05e8c reformatting: cJSON_DeleteItemFromObject 2016-10-02 19:04:25 +07:00
Max Bruckner 96ec74c9d5 reformatting: cJSON_DetachItemFromObject 2016-10-02 19:04:25 +07:00
Max Bruckner 6e5063f9cc reformatting: cJSON_DeleteItemFromArray 2016-10-02 19:04:25 +07:00
Max Bruckner c636621779 reformatting: cJSON_DetachItemFromArray 2016-10-02 19:04:25 +07:00
Max Bruckner b602ef1cd5 reformatting: cJSON_AddItemReferenceToObject 2016-10-02 19:04:24 +07:00
Max Bruckner 55e33d7100 reformatting: cJSON_AddItemReferenceToArray 2016-10-02 19:04:24 +07:00
Max Bruckner b55120eeb2 reformatting: cJSON_AddItemToObjectCS 2016-10-02 19:04:24 +07:00
Max Bruckner 196885ad93 reformatting: cJSON_AddItemToObject 2016-10-02 19:04:24 +07:00
Max Bruckner c26f9b918d reformatting: cJSON_AddItemToArray 2016-10-02 19:04:23 +07:00
Max Bruckner 09545c0eb2 reformatting: create_reference 2016-10-02 19:04:23 +07:00
Max Bruckner 17e13946fe reformatting: cJSON_HasObjectItem 2016-10-02 19:04:23 +07:00
Max Bruckner af44d57007 reformatting: cJSON_GetObjectItem 2016-10-02 19:04:23 +07:00
Max Bruckner 05c2dc3c2f reformatting: cJSON_GetArrayItem 2016-10-02 19:04:22 +07:00
Max Bruckner 4fdb6499f0 reformatting: cJSON_GetArraySize 2016-10-02 19:04:22 +07:00
Max Bruckner 31e53a1297 reformatting: print_object 2016-10-02 19:04:22 +07:00
Max Bruckner 25632fad13 reformatting: parse_object 2016-10-02 19:04:22 +07:00
Max Bruckner 782770c6ba reformatting: print_array 2016-10-02 19:04:21 +07:00
Max Bruckner ad711e6fab reformatting: parse_array 2016-10-02 19:04:21 +07:00
Max Bruckner a9f752e034 reformatting: print_value: 255 -> 0xFF 2016-10-02 19:04:21 +07:00
Max Bruckner de4dc19e72 reformatting: print_value 2016-10-02 19:04:21 +07:00
Max Bruckner c5f635d24a reformatting: parse_value 2016-10-02 19:04:20 +07:00
Max Bruckner 9b7eb6a46d reformatting: cJSON_PrintBuffered 2016-10-02 19:04:20 +07:00
Max Bruckner ec46581b68 reformatting: cJSON_PrintUnformatted 2016-10-02 19:04:20 +07:00
Max Bruckner 1748902d3c reformatting: cJSON_Print 2016-10-02 19:04:20 +07:00
Max Bruckner f36d9c9ef2 reformatting: cJSON_Parse 2016-10-02 19:04:19 +07:00
Max Bruckner e809022349 reformatting: cJSON_ParseWithOpts 2016-10-02 19:04:19 +07:00
Max Bruckner f1dd51bfb5 reformatting: skip 2016-10-02 19:04:19 +07:00
Max Bruckner d42febea50 reformatting: Predeclared print prototypes 2016-10-02 19:04:18 +07:00
Max Bruckner 7423692586 reformatting: print_string 2016-10-02 19:04:18 +07:00
Max Bruckner c71cd6cc1c reformatting: print_string_ptr 2016-10-02 19:04:18 +07:00
Max Bruckner c88d045888 reformatting: parse_string 2016-10-02 19:04:16 +07:00
Max Bruckner 2e2dc873b2 reformatting: firstByteMark 2016-10-02 19:01:27 +07:00
Max Bruckner e10f2bf08d reformatting: parse_hex4 2016-10-02 19:01:27 +07:00
Max Bruckner 67845e3dc6 reformatting: print_number 2016-10-02 19:01:27 +07:00
Max Bruckner 282006d918 reformatting: update 2016-10-02 19:01:26 +07:00
Max Bruckner 7f9a2691bf reformatting: ensure 2016-10-02 19:01:26 +07:00
Max Bruckner b53ce73709 reformatting: printbuffer 2016-10-02 19:01:26 +07:00
Max Bruckner d5bd497636 reformatting: pow2gt 2016-10-02 19:01:26 +07:00
Max Bruckner 88cbe57ba4 reformatting: parse_number 2016-10-02 19:01:25 +07:00
Max Bruckner 46cfa68a2b reformatting: cJSON_Delete 2016-10-02 19:01:25 +07:00
Max Bruckner 55488f66f6 reformatting: cJSON_New_Item 2016-10-02 19:01:25 +07:00
Max Bruckner 8db7e6d320 reformatting: cJSON_InitHooks 2016-10-02 19:01:25 +07:00
Max Bruckner 18081c03c4 reformatting: cJSON_strdup 2016-10-02 19:01:24 +07:00
Max Bruckner 542ed727d7 reformatting: cJSON_strcasecmp 2016-10-02 19:01:24 +07:00
Max Bruckner c42b774f9f reformatting: cJSON_GetErrorPtr 2016-10-02 19:01:24 +07:00
Max Bruckner 94df772485 fix buffer overflow (#30) 2016-10-02 18:56:53 +07:00
Dave Gamble 2fe50bd557 get rid of isnormal test!! 2016-05-29 16:19:14 +01:00
Dave Gamble 87f55416c1 we can safely remove this, since the initial d==0 case catches this. 2016-05-29 16:01:06 +01:00
Dave Gamble e6b352d126 tidy up some code that was added a while back. 2016-03-20 00:24:41 +00:00
Dave Gamble b4151361de Allow for global/local error pointers. If you supply a return_parse_end
to cJSON_ParseWithOpts, then that will store the error pointer (if
parsing fails).
2016-03-19 18:41:44 +00:00
Dave Gamble fe967cd1ff extra checking for memory allocation failure. 2016-03-19 18:14:19 +00:00
Dave Gamble ee579ecbd6 Integrate patch for handling broken unicode surrogate pairs, with
thanks to kolman and Irwan Djajadi on SourceForge.
2016-03-19 18:14:06 +00:00
Christian Schulze 52d7d14f6c fixed segfault when the lib tries to parse HTML with embedded CSS; provided test case 2016-03-06 16:43:53 +01:00
Max Bruckner 8222e9b8c4 Fix printing of empty string pointers
Once the check if str is NULL is reached, str has already been
derereferenced in the for loop, so in the case that the if clause would
be entered, the program has already crashed due to a null pointer
dereference.

By checking the content of str before dereferencing, the code in the if
clause is actually useful.

for (ptr=str;*ptr;ptr++) flag|=((*ptr>0 && *ptr<32)||(*ptr=='\"')||(*ptr=='\\'))?1:0;

...

if (!str)
...
2015-10-26 03:08:47 +01:00
Max Bruckner 9cc37a2844 Fix format problem with empty objects
When printing empty objects, the closing curly brace was missing one
indentation level.

Example from the output of test_utils:

BEFORE FIX:
{
	"foo":	"bar",
	"child":	{
		"grandchild":	{
	}
	}
}

AFTER FIX:
{
	"foo":	"bar",
	"child":	{
		"grandchild":	{
		}
	}
}
2015-10-26 02:43:44 +01:00
Max Bruckner 7c25dc9135 Remove line that will never be executed 2015-10-16 15:01:24 +02:00
Kevin Branigan 8865d869db cJSON_HasObjectItem didn’t compile 2015-10-01 12:03:27 -04:00
Kevin Branigan 1e1de63244 Merge pull request #13 from rmeertens/master
added cJSON_HasObjectItem
2015-10-01 11:37:44 -04:00
Linus Wallgren e4b96fa820 Handle invalid numbers
Previously cJSON generated invalid JSON when a number was infinite or
similar. This patch changes the behaviour to match javascript, that is
to render such a number as null.
2015-10-01 17:27:59 +02:00
Roland Meertens b175877d8b +usefull function 2015-09-15 02:40:27 +02:00
Anton Sergeev 74793934ad Merge latest upstream code (r73) into github fork.
Signed-off-by: Anton Sergeev <Anton.Sergeev@elecard.ru>

Conflicts:
	cJSON.c
	test.c
2015-07-28 03:48:06 +06:00
DongwenHuang 10b888be54 Update cJSON.c 2015-06-15 17:13:22 +08:00
Dave Gamble 1d9b70e706 Fix comment style for proper ansi c compliance.
git-svn-id: svn://svn.code.sf.net/p/cjson/code@69 e3330c51-1366-4df0-8b21-3ccf24e3d50e
2015-02-13 19:07:29 +00:00
Dave Gamble 9d0a4cbf2a adjust the test very slightly
git-svn-id: svn://svn.code.sf.net/p/cjson/code@68 e3330c51-1366-4df0-8b21-3ccf24e3d50e
2015-02-11 11:34:01 +00:00
Dave Gamble b44a338c6d Optimise out escapable array.
git-svn-id: svn://svn.code.sf.net/p/cjson/code@67 e3330c51-1366-4df0-8b21-3ccf24e3d50e
2015-02-11 11:31:35 +00:00
Dave Gamble 3c6b3cc617 start of JSON Patch implementation. cJSON gained a cJSON_InsertItemToArray which pushes elements up by one.
This is needed for JSON Patch. Everything but Test is implemented for ApplyPatches.


git-svn-id: svn://svn.code.sf.net/p/cjson/code@65 e3330c51-1366-4df0-8b21-3ccf24e3d50e
2015-02-10 14:17:59 +00:00
Dave Gamble 2abfb716d1 fix formatting.
git-svn-id: svn://svn.code.sf.net/p/cjson/code@62 e3330c51-1366-4df0-8b21-3ccf24e3d50e
2015-02-09 17:38:18 +00:00
Dave Gamble d9fc81e6c8 Added buffered printing methods for faster printing.
git-svn-id: svn://svn.code.sf.net/p/cjson/code@61 e3330c51-1366-4df0-8b21-3ccf24e3d50e
2015-02-09 17:34:35 +00:00
Dave Gamble 70984d47e9 patch to optimise array/object printing.
git-svn-id: svn://svn.code.sf.net/p/cjson/code@60 e3330c51-1366-4df0-8b21-3ccf24e3d50e
2015-02-09 17:28:26 +00:00
Dave Gamble 575724a15f optimises for number/string print
git-svn-id: svn://svn.code.sf.net/p/cjson/code@59 e3330c51-1366-4df0-8b21-3ccf24e3d50e
2015-02-09 17:25:55 +00:00
Rafael Leal Dias a3eafd540d Fixed issue withh ansi (single-line comments) and updated Makefile for compiling dynamic and static lib. 2015-01-30 12:06:14 -02:00
Mike Pontillo cf50682983 Merge latest upstream code into github fork.
Conflicts:
	cJSON.c
	cJSON.h
	test.c
2014-05-20 20:03:20 -07:00
Dave Gamble 28691956a6 fix \u parser
git-svn-id: http://svn.code.sf.net/p/cjson/code@58 e3330c51-1366-4df0-8b21-3ccf24e3d50e
2013-08-19 14:49:06 +00:00
Dave Gamble c537515c17 inbuilt hex parser for unicode, which ought to be a lot faster.
git-svn-id: http://svn.code.sf.net/p/cjson/code@57 e3330c51-1366-4df0-8b21-3ccf24e3d50e
2013-08-14 13:20:42 +00:00
Dave Gamble 73cc8dd1c4 cJSON_Minify (which strips comments),
fixed buffer overflow
const * for array creates


git-svn-id: http://svn.code.sf.net/p/cjson/code@55 e3330c51-1366-4df0-8b21-3ccf24e3d50e
2013-08-14 12:58:13 +00:00
Dave Gamble 2c9474e9e3 fix non-explicit cast
git-svn-id: http://svn.code.sf.net/p/cjson/code@52 e3330c51-1366-4df0-8b21-3ccf24e3d50e
2013-02-09 12:55:11 +00:00
Dave Gamble 96c59f3e49 Wire in ParseWithOpts to allow detection of JSON with following garbage.
git-svn-id: http://svn.code.sf.net/p/cjson/code@50 e3330c51-1366-4df0-8b21-3ccf24e3d50e
2013-02-06 12:44:17 +00:00
Dave Gamble d755436ba7 tests for cJSON_Duplicate, so it will fail by returning 0 if anything fails to allocate
git-svn-id: http://svn.code.sf.net/p/cjson/code@49 e3330c51-1366-4df0-8b21-3ccf24e3d50e
2013-02-05 18:26:51 +00:00
Dave Gamble 927aa631b8 Added cJSON_Duplicate. With commentary
git-svn-id: http://svn.code.sf.net/p/cjson/code@48 e3330c51-1366-4df0-8b21-3ccf24e3d50e
2013-02-05 18:23:22 +00:00
Dave Gamble a7fe08778f bracket logic (to quiet a warning).
Fix for potential buffer overflow printing extremely large integers.


git-svn-id: http://svn.code.sf.net/p/cjson/code@47 e3330c51-1366-4df0-8b21-3ccf24e3d50e
2013-02-05 17:42:42 +00:00
Dave Gamble 8c60f99c72 fix handling of utf16 surrogate pairs!
git-svn-id: http://svn.code.sf.net/p/cjson/code@46 e3330c51-1366-4df0-8b21-3ccf24e3d50e
2013-02-05 17:38:48 +00:00
Dave Gamble 8aa084918f Revert last patch. Simpler fix for empty arrays/objects is to handle them explicitly and then bail.
Saves plenty of unnecessary state-tracking.


git-svn-id: http://svn.code.sf.net/p/cjson/code@45 e3330c51-1366-4df0-8b21-3ccf24e3d50e
2013-02-05 17:27:59 +00:00
Dave Gamble 3ddf3a5911 stable solution for printing arrays - based on patch donated by Jerome Lang.
Resolves issue in case malloc(0)!=0.



git-svn-id: http://svn.code.sf.net/p/cjson/code@44 e3330c51-1366-4df0-8b21-3ccf24e3d50e
2013-02-05 17:14:12 +00:00
Dave Gamble 4678f33b5c Fix up ANSI issues.
git-svn-id: http://svn.code.sf.net/p/cjson/code@43 e3330c51-1366-4df0-8b21-3ccf24e3d50e
2013-02-05 17:00:31 +00:00
Dave Gamble fd1ac4f179 make parse_number more robust!
git-svn-id: http://svn.code.sf.net/p/cjson/code@42 e3330c51-1366-4df0-8b21-3ccf24e3d50e
2011-10-10 15:33:19 +00:00
Dave Gamble 0d268cfef7 Update to cJSON! We now support UTF-16 surrogate pairs :)
git-svn-id: http://svn.code.sf.net/p/cjson/code@41 e3330c51-1366-4df0-8b21-3ccf24e3d50e
2011-10-10 15:22:34 +00:00
Kevin Branigan fc0df31a18 init commit 2011-08-22 00:43:38 -04:00
Dave Gamble 9061b7a7e7 Fix c99 violation!
git-svn-id: http://svn.code.sf.net/p/cjson/code@40 e3330c51-1366-4df0-8b21-3ccf24e3d50e
2011-03-14 21:34:03 +00:00
Dave Gamble 15dada46b5 Fix missing cast for compilation as c++!!
git-svn-id: http://svn.code.sf.net/p/cjson/code@39 e3330c51-1366-4df0-8b21-3ccf24e3d50e
2011-03-07 16:35:13 +00:00
Dave Gamble 6a58ba5285 Include some analysis so that you can debug a failed parse.
You really oughtn't go too far with this, because it's only loose information; as I've said before, cJSON +isn't+ a validating parser. But this might give you enough info to save yourself on some rare occasion ;)



git-svn-id: http://svn.code.sf.net/p/cjson/code@38 e3330c51-1366-4df0-8b21-3ccf24e3d50e
2011-03-02 21:22:57 +00:00
Dave Gamble b5d57642c2 Handle control-chars.
In a certain sense, we shouldn't be seeing them, but this way we at least handle them well.


git-svn-id: http://svn.code.sf.net/p/cjson/code@37 e3330c51-1366-4df0-8b21-3ccf24e3d50e
2011-03-02 21:04:46 +00:00
Dave Gamble b5d2db4d9a print_object was calling free() rather than cJSON_free() under failure conditions!
git-svn-id: http://svn.code.sf.net/p/cjson/code@36 e3330c51-1366-4df0-8b21-3ccf24e3d50e
2011-03-02 19:15:06 +00:00
Dave Gamble 6f51f007a9 cJSON_Parse("") should return 0.
git-svn-id: http://svn.code.sf.net/p/cjson/code@35 e3330c51-1366-4df0-8b21-3ccf24e3d50e
2011-03-02 19:12:29 +00:00
Dave Gamble 02d86ef778 Update to permit compilation with gcc -ansi flag
(changed all C++ // comments to C /* */ comments).



git-svn-id: http://svn.code.sf.net/p/cjson/code@34 e3330c51-1366-4df0-8b21-3ccf24e3d50e
2011-03-02 19:09:43 +00:00
Dave Gamble de7afcc458 change firstByteMark to unsigned to prevent constant overflow warning
git-svn-id: http://svn.code.sf.net/p/cjson/code@33 e3330c51-1366-4df0-8b21-3ccf24e3d50e
2010-02-18 10:40:37 +00:00
Dave Gamble 149d013543 Wrong order for variable declaration.
git-svn-id: http://svn.code.sf.net/p/cjson/code@32 e3330c51-1366-4df0-8b21-3ccf24e3d50e
2010-02-13 22:32:15 +00:00
Dave Gamble 6711153d41 CreateBool, because it's useful ;)
git-svn-id: http://svn.code.sf.net/p/cjson/code@31 e3330c51-1366-4df0-8b21-3ccf24e3d50e
2010-02-12 16:24:54 +00:00
Dave Gamble 3fb3989bb1 All memory allocations are now checked, and should fail gracefully in a low memory environment.
git-svn-id: http://svn.code.sf.net/p/cjson/code@30 e3330c51-1366-4df0-8b21-3ccf24e3d50e
2010-01-27 13:01:15 +00:00
Dave Gamble 7dd9280267 Fix handling of non-ascii characters!
Many thanks to an anonymous submitter for this fix!!



git-svn-id: http://svn.code.sf.net/p/cjson/code@29 e3330c51-1366-4df0-8b21-3ccf24e3d50e
2010-01-23 12:44:58 +00:00
Dave Gamble d9840479f5 Include ctype.h for tolower()
git-svn-id: http://svn.code.sf.net/p/cjson/code@28 e3330c51-1366-4df0-8b21-3ccf24e3d50e
2010-01-07 23:07:58 +00:00
Dave Gamble ee4ce32ea8 make strcasecmp STABLE if passed a null string
git-svn-id: http://svn.code.sf.net/p/cjson/code@27 e3330c51-1366-4df0-8b21-3ccf24e3d50e
2010-01-01 23:13:31 +00:00
Dave Gamble 6420cfe7c4 solve the stricmp/strcasecmp in a dumb way for good.
I might make cJSON_strcasecmp hookable, depending on what feedback i get.
There are now +NO+ #ifdef/#endif WINDOWS clauses, just neat ANSI C.
Also, this DOES NOT represent an efficiency hit for parsing, since the casecmp code is ONLY used for retrieval of object values, which would be after the parse stage. 


git-svn-id: http://svn.code.sf.net/p/cjson/code@26 e3330c51-1366-4df0-8b21-3ccf24e3d50e
2009-12-09 15:43:38 +00:00
Dave Gamble efe33fabbb ID: 2907153
declare variable first, so we're proper c ;)


git-svn-id: http://svn.code.sf.net/p/cjson/code@25 e3330c51-1366-4df0-8b21-3ccf24e3d50e
2009-12-09 12:31:32 +00:00
Dave Gamble 37963a72b9 Don't crash if someone calls cJSON_Print(0);
git-svn-id: http://svn.code.sf.net/p/cjson/code@24 e3330c51-1366-4df0-8b21-3ccf24e3d50e
2009-11-26 20:17:25 +00:00
Dave Gamble 091c0676c1 return 0!
git-svn-id: http://svn.code.sf.net/p/cjson/code@23 e3330c51-1366-4df0-8b21-3ccf24e3d50e
2009-11-25 19:33:40 +00:00
Dave Gamble 341bb3c640 oops! remember to kill dead pointers on Detach!!
git-svn-id: http://svn.code.sf.net/p/cjson/code@22 e3330c51-1366-4df0-8b21-3ccf24e3d50e
2009-11-25 17:06:26 +00:00
Dave Gamble 79a796aed2 Detatch and Remove objects from Arrays/Objects.
git-svn-id: http://svn.code.sf.net/p/cjson/code@21 e3330c51-1366-4df0-8b21-3ccf24e3d50e
2009-11-25 17:04:05 +00:00
Dave Gamble 29b085bc5d Feature Request: 2903802.
If you need to add an existing cJSON to a new object, but the existing object
must not be affected by this, use cJSON_AddItemReferenceTo<Array|Object>.

This will make a "reference" to the existing object (which is what you really mean to do),
and allow you to use it with a new object without fear of names being corrupted or things
being deleted.

Think of it like a reference, since that's pretty much what it is.
If you modify the resulting object (i.e. you AddItemReference, then retrieve with GetObjectItem,
and then start adding/replacing) you'll modify the object you pass in (in other words, this
doesn't clone everything, since that would probably end up being wasteful of space), however,
if you add it, and treat it as if it were const, everything will be fine!
 


git-svn-id: http://svn.code.sf.net/p/cjson/code@20 e3330c51-1366-4df0-8b21-3ccf24e3d50e
2009-11-25 16:52:07 +00:00
Dave Gamble c4e8954eb2 Feature request: 2903779.
Unformatted output. :)



git-svn-id: http://svn.code.sf.net/p/cjson/code@19 e3330c51-1366-4df0-8b21-3ccf24e3d50e
2009-11-25 15:27:39 +00:00
Dave Gamble 501ff3b3d0 if it's a big number, but still an integer, print it exactly!
git-svn-id: http://svn.code.sf.net/p/cjson/code@18 e3330c51-1366-4df0-8b21-3ccf24e3d50e
2009-11-25 15:18:19 +00:00
Dave Gamble 0dbe29ffe8 fix bug 2895595 from jshvrsn whereby values outside of INT_MIN/INT_MAX range are printed incorrectly as ints.
git-svn-id: http://svn.code.sf.net/p/cjson/code@17 e3330c51-1366-4df0-8b21-3ccf24e3d50e
2009-11-11 00:15:53 +00:00
Dave Gamble 991b577247 fix the ReplaceObject functions; tighten them up, add some more checks for stability.
git-svn-id: http://svn.code.sf.net/p/cjson/code@14 e3330c51-1366-4df0-8b21-3ccf24e3d50e
2009-11-10 23:50:43 +00:00
Dave Gamble b3bd706f8f prototype versions of ReplaceObject.
Based on an idea from Daniel Harcek; these are designed to allow you to replace entries in an object or array with new
values. The old values get deleted and the new ones are wired into place.

This leads to a structure like this:
cJSON_ReplaceItemInObject(myobject, "spooncount", cJSON_CreateNumber(24));

cJSON +NEVER+ type checks, so it's perfectly legal to replace an object with a string (to cJSON) though it may not be in your schema!



git-svn-id: http://svn.code.sf.net/p/cjson/code@13 e3330c51-1366-4df0-8b21-3ccf24e3d50e
2009-11-10 23:32:11 +00:00
Dave Gamble 5cca4e2c57 simplify the rendering code so there's no 'realloc' going on.
That seemed horribly inefficient to me.
Now we use multiple passes and can test for failure more carefully.


git-svn-id: http://svn.code.sf.net/p/cjson/code@12 e3330c51-1366-4df0-8b21-3ccf24e3d50e
2009-11-10 22:57:37 +00:00
Dave Gamble 37da1d2493 Fix for printing values that contain % literals. Thanks to Jimmy Tam!
git-svn-id: http://svn.code.sf.net/p/cjson/code@11 e3330c51-1366-4df0-8b21-3ccf24e3d50e
2009-11-06 15:41:44 +00:00
Dave Gamble 7ca2c994a7 incorporate hooks feature from bug 2883206
also new errorhandling for memory failure cases. +I HAVE NOT CHECKED THIS FOR ABILITY TO LEAK!+



git-svn-id: http://svn.code.sf.net/p/cjson/code@10 e3330c51-1366-4df0-8b21-3ccf24e3d50e
2009-10-29 00:21:54 +00:00
Dave Gamble c052999a71 fix bug: 2885206, whereby memory would leak in print_object if print_value failed.
git-svn-id: http://svn.code.sf.net/p/cjson/code@9 e3330c51-1366-4df0-8b21-3ccf24e3d50e
2009-10-29 00:06:15 +00:00
Dave Gamble 75e1702659 fix bug: 2859459 (crash when printing JSON)
handling of string length was incorrect.



git-svn-id: http://svn.code.sf.net/p/cjson/code@8 e3330c51-1366-4df0-8b21-3ccf24e3d50e
2009-10-28 23:59:05 +00:00
Dave Gamble e5fe65f58a ...try that again... better WINDOWS/WIN32/__WIN32__ (for Borland C) sentinelling
also missed the casts on realloc()



git-svn-id: http://svn.code.sf.net/p/cjson/code@6 e3330c51-1366-4df0-8b21-3ccf24e3d50e
2009-09-09 18:56:31 +00:00
Dave Gamble 6d50358e26 Windows/c++ support (with thanks to Ron Hall):
added strcasecmp->stricmp
added (char*) casts to all mallocs (as reqd by c++)
added skip(value) to cJSON_Parse to allow for whitespace before the actual data


git-svn-id: http://svn.code.sf.net/p/cjson/code@5 e3330c51-1366-4df0-8b21-3ccf24e3d50e
2009-09-09 10:44:00 +00:00
Dave Gamble a4a4e7cbff make these PROPERLY ansi-c compliant ;)
git-svn-id: http://svn.code.sf.net/p/cjson/code@2 e3330c51-1366-4df0-8b21-3ccf24e3d50e
2009-08-26 03:57:15 +00:00