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.
This commit is contained in:
Petri Lehtinen 2011-11-14 19:10:28 +02:00
parent 5ec101ec21
commit 0f2cdd70ff
2 changed files with 6 additions and 2 deletions

View File

@ -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,

View File

@ -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;
}