From 0f2cdd70ff9c2f0dd35a2e62b5bac87305d17bf4 Mon Sep 17 00:00:00 2001 From: Petri Lehtinen Date: Mon, 14 Nov 2011 19:10:28 +0200 Subject: [PATCH] Avoid problems with object's serial number growing too big Transform serial key comparison from substraction to real comparison. Reset serial to zero in json_object_clear() to avoid it growing out of bounds when reusing objects. Closes GH-40. Closes GH-41. --- src/dump.c | 6 ++++-- src/value.c | 2 ++ 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/src/dump.c b/src/dump.c index 33112ba..089474d 100644 --- a/src/dump.c +++ b/src/dump.c @@ -159,8 +159,10 @@ static int object_key_compare_keys(const void *key1, const void *key2) static int object_key_compare_serials(const void *key1, const void *key2) { - return (*(const object_key_t **)key1)->serial - - (*(const object_key_t **)key2)->serial; + size_t a = (*(const object_key_t **)key1)->serial; + size_t b = (*(const object_key_t **)key2)->serial; + + return a < b ? -1 : a == b ? 0 : 1; } static int do_dump(const json_t *json, size_t flags, int depth, diff --git a/src/value.c b/src/value.c index d0517d5..5ef4138 100644 --- a/src/value.c +++ b/src/value.c @@ -186,7 +186,9 @@ int json_object_clear(json_t *json) return -1; object = json_to_object(json); + hashtable_clear(&object->hashtable); + object->serial = 0; return 0; }