summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBjörn Esser <besser82@fedoraproject.org>2017-12-16 17:09:39 +0100
committerBjörn Esser <besser82@fedoraproject.org>2017-12-17 12:51:17 +0100
commitc233f5c05e92909a764973524a03471bfad78f09 (patch)
tree3569b9a633e75533ed968b18b8e854ff7c45388c
parent5ea6a05bfa43c9ba438fbc0eaea600edd6d72b88 (diff)
downloadjson-c-c233f5c05e92909a764973524a03471bfad78f09.tar.gz
json_object_private: Use unsigned 32-bit integer type for refcount
-rw-r--r--json_object.c3
-rw-r--r--json_object_private.h2
2 files changed, 4 insertions, 1 deletions
diff --git a/json_object.c b/json_object.c
index 7c7438d..da96f4c 100644
--- a/json_object.c
+++ b/json_object.c
@@ -169,6 +169,9 @@ extern struct json_object* json_object_get(struct json_object *jso)
{
if (!jso) return jso;
+ // Don't overflow the refcounter.
+ assert(jso->_ref_count < UINT_FAST32_MAX);
+
#if defined(HAVE_ATOMIC_BUILTINS) && defined(ENABLE_THREADING)
__sync_add_and_fetch(&jso->_ref_count, 1);
#else
diff --git a/json_object_private.h b/json_object_private.h
index 53be70d..51134b6 100644
--- a/json_object_private.h
+++ b/json_object_private.h
@@ -29,7 +29,7 @@ struct json_object
enum json_type o_type;
json_object_private_delete_fn *_delete;
json_object_to_json_string_fn *_to_json_string;
- int _ref_count;
+ uint_fast32_t _ref_count;
struct printbuf *_pb;
union data {
json_bool c_boolean;