Commit Graph

40 Commits

Author SHA1 Message Date
Krzysztof Gabis
a34e725282 1.4.0: Accepting trailing commas in objects and arrays
Issue #178
2022-03-06 21:27:20 +01:00
Cristian Pop
4158fdbea7
1.3.1: Fixes size_t conversion on x64 systems. Excluding build/ in .gitignore. (#177)
* Fixing size_t conversion on x64 systems. Excluding build/ in .gitignore.

* 1.3.1: Increments version.

Co-authored-by: Krzysztof Gabis <kgabis@gmail.com>
2022-02-24 20:22:46 +01:00
Krzysztof Gabis
4bd5797811 Fixes repository URL
#176
2022-02-18 21:28:25 +01:00
Krzysztof Gabis
6e30db3599 Updates license (version and year). 2022-01-26 12:14:25 +01:00
Krzysztof Gabis
af848c27b4 1.3.0: Adds json_set_float_serialization_format function. 2021-12-11 18:11:18 +01:00
Krzysztof Gabis
fd77bcddc1 1.2.1: Not using SIZE_MAX macro (issue #167) 2021-08-06 15:46:45 +02:00
Krzysztof Gabis
6b3d6f42f2 1.2.0: JSON objects are now implemented using hash maps, PARSON_VERSION defines (issue #37) 2021-08-05 20:24:57 +02:00
Krzysztof Gabis
2d7b3ddf12 1.1.3: Ignoring floating point underflow (issue #161) 2021-05-26 14:01:51 +02:00
Disconnect3d
ab7f5e5401
Fix memleak when parsing keys with embedded null bytes (#157)
* Fix memleak when parsing key with embedded null byte

This commit fixes and adds a test for a memory leak that occurs when
parsing strings with keys that have a null byte embedded in them.

This memory leak can be triggered with the following line, where this
call returns a `NULL`:
```c
        json_parse_string("{\"\\u0000\"")
```

This memory leak happens in the `parse_object_value` function in here:
```
        new_key = get_quoted_string(string, &key_len);  <---- ALLOCATION
        /* We do not support key names with embedded \0 chars */
        if (new_key == NULL || key_len != strlen(new_key)) {
            json_value_free(output_value);
            return NULL;                       <---- `new_key` NOT FREED
        }
        SKIP_WHITESPACES(string);
        if (**string != ':') {
            parson_free(new_key);
            json_value_free(output_value);
            return NULL;
        }
```

* Increments version to 1.1.2

Co-authored-by: Krzysztof Gabis <kgabis@gmail.com>
2021-05-03 18:47:03 +02:00
benswick
60b2c69f17
Improved serialization performance (#156)
* Update parson.c

Get objects by index instead of key in json_serialize_to_buffer_r().

* Increments version and updates licence date.

Co-authored-by: Krzysztof Gabis <kgabis@gmail.com>
2021-04-07 22:23:01 +02:00
reuben olinsky
102a4467e1
Add support for string values with embedded '\0' characters (#137)
* Add support for strings with \0 chars

* address feedback

* Increments minor version, adds comments, changes license year

Co-authored-by: Krzysztof Gabis <kgabis@gmail.com>
2020-04-16 21:55:56 +02:00
ɹɐɯsǝʎ
186680a511 Guard against potential integer overflow (#133)
* Guard against potential integer overflow

If int res holds the value INT_MAX then adding 1 results in undefined
behavior. To guard against this possibility, cast res to size_t, not
the result of res + 1.

Fixes #132

* Increments version.

* More consitent parentheses when casting to size_t.
2019-12-03 10:59:32 +01:00
dan soucy
9d63e76014 Avoid truncating strings warning (#131)
* Avoid truncating strings warning

GCC 8 introduced the `stringop-truncation` warning, which warns for
uses of `strncpy` of the form `strncpy(out, in, strlen(in))`. This
is often helpful, as this call would not copy the trailing `\0`,
potentially leading to subtle bugs.

With optimizations enabled, the function `parson_strndup` is
inlined, allowing the compiler to see that this call to `strncpy` is
of the form described above. GCC therefore outputs the warning.

In this case, the out buffer has already had the terminating `\0`
written to the end. Thus it is not necessary to copy it. GCC 9.2 is
not quite smart enough to recognize this, so it warns.

The warning is silenced by using `memcpy` instead of `strncpy`.

Although I have not benchmarked it, this change might reasonably
improve the performance of `parson_strndup`. `strncpy` checks every
byte for `\0` in addition to counting to `n`. `memcpy` does not need
to check whether the bytes it copies are `\0`.

However, if `parson_strndup` is frequently passed `char *`s with a
`\0` somewhere in the middle, then `memcpy` will copy more bytes
than necessary, hurting performance. In this case, a better solution
might be:

```
- output_string[n] = `\0`;
- strncpy(output_string, string, n);
+ strncpy(output_string, string, n+1);
```

* Increments parson's version.
2019-12-02 23:24:29 +01:00
Krzysztof Gabis
0341880552 Using semantic versioning from now on, Parson is officially 1.0.0 2019-11-28 10:12:03 +01:00
Krzysztof Gabis
c5bb9557fe Updates copyright year. 2019-07-11 18:33:44 +02:00
Akihiro Suda
9ec77a8d74 add SPDX-License-Identifier
SPDX-License-Identifier is useful to clarify the license (both for humans and
machines), especially when the code of the project is embedded into other
projects.

ref: https://spdx.org/using-spdx-license-identifier

Signed-off-by: Akihiro Suda <akihiro.suda.cz@hco.ntt.co.jp>
2019-07-11 21:23:37 +09:00
Krzysztof Gabis
302fba9cbb Makes escaping slashes when serializing JSON optional (adds json_set_escape_slashes() function)
Issues #20 #34 #90
2018-11-26 20:12:16 +01:00
zolvarga
69684f600c Remove trailing spaces 2018-09-06 13:30:52 -07:00
Krzysztof Gabis
2bfa4153db Updates copyright. 2017-02-18 16:41:14 +00:00
Krzysztof Gabis
f419334a32 Adds links to parent values and values used to wrap objects/arrays. Assigning a value to 2 objects/arrays returns an error now.
Addresses issues #66 and #30.
2016-12-29 23:50:20 +01:00
Krzysztof Gabis
a1c356eaa9 Adds functions to check if object has value with a certain name (and optionally type).
This closes #42.
2016-07-05 12:23:17 +02:00
Krzysztof Gabis
f60ddcd05b Adds missing character (in a comment). 2016-04-23 12:15:13 +02:00
Krzysztof Gabis
5c4a11b036 Removes trailing whitespace. 2016-04-23 12:11:25 +02:00
Krzysztof Gabis
473c7f3d8d Adds json_object_get_value_at function to access values in objects in O(1) time.
Also adds some missing null checking.
2016-04-23 11:59:34 +02:00
Krzysztof Gabis
c9b920c4a3 Fixes a bug in json_array_remove and adds relevant tests (thanks to KB for finding this).
Also - it's 2016, time to update copyright notices, yay!
2016-01-13 20:47:47 +00:00
Krzysztof Gabis
86a5a20856 Adds comments regarding memory management. 2015-07-15 22:29:14 +01:00
Krzysztof Gabis
18761d99ff Checking if json_serialization_size failed. 2015-07-03 19:12:48 +01:00
Krzysztof Gabis
f16e4292f3 Using same code for determining serialization buffer size and serialization. Updated license year. 2015-06-26 00:12:06 +02:00
Krzysztof Gabis
6905548257 Pretty serialization + tests. 2015-06-22 16:53:19 +02:00
Krzysztof Gabis
1586461280 Adds function to change default allocator, fixes potential memory leak, refactoring. 2015-06-01 22:26:31 +01:00
Michael Sproul
fcf0b810ba Marked various files as not executable.
Also updated the .gitignore file to ignore object code,
which is particularly useful when using this project as a
git submodule.
2015-02-28 20:33:17 -08:00
Krzysztof Gabis
638190d6a0 Merged changes from parson-devel (serialization, copying, comparing, validation, creating values). 2014-10-07 21:11:29 +02:00
Krzysztof Gabis
c707051778 Added surrogate pairs support (JSON support is full now), removed PARSON_VERSION macro. 2014-04-10 17:00:40 +02:00
Krzysztof Gabis
d5adf4e291 Added functions to parse file with comments and new tests.
json_parse_value_with_comments and json_parse_string_with_comments replace comments with whitespaces before parsing. Supported comments are: /* */ and //
2013-11-30 20:22:16 +01:00
Krzysztof Gabis
f7f11572c9 Fixed bug in nget function, added 2 functions to API, improved memory allocs.
Details:
- Fixed bug, where json_object_nget_value returned wrong values.
- json_object_get_count returns a number of object's name-value pairs.
- json_object_get_name returns a name at a specific index.
- Both functions allow iterating over every value in a object.
- Changed max capacity for JSON_Array and JSON_Object (they're not equal anymore).
- Added functions to resize object and array, which are also used after parsing to "trim" them to their real lengths.
- Added try_realloc function.
- Added SUCCESS and ERROR macros to make code more readable.
- Code cleanup.
2012-11-07 22:51:03 +01:00
Krzysztof Gabis
202f16cc5c Additional code cleanup.
Removed redundant typedefs, renamed JSON_value_t to JSON_Value_Type and JSON_value_value to JSON_Value_Value to make names more consistent across project. Added project's name and url above license.
2012-11-03 19:52:49 +01:00
sduclos
684096eb0f code clea up 2012-11-03 08:19:28 -04:00
Krzysztof Gabis
410807850e Fixed some compatibility issues with C++ compilers.
Added error type to json value types. Also implemented strdup and strndup, since they can be problematic and are not implemented everywhere.
2012-10-18 18:36:58 +02:00
Krzysztof Gabis
2740213c5c Renamed bool to boolean.
Naming variables bool is a poor idea, even in C.
2012-10-18 15:25:11 +02:00
Krzysztof Gabis
de829803e3 Initial commit. 2012-10-16 19:56:54 +02:00