json: Better handle JSON objects with duplicate names.
authorBen Pfaff <blp@nicira.com>
Wed, 30 Jun 2010 20:57:24 +0000 (13:57 -0700)
committerBen Pfaff <blp@nicira.com>
Wed, 30 Jun 2010 23:49:01 +0000 (16:49 -0700)
RFC 4627 (which defines JSON) says:

    The names within an object SHOULD be unique.

In my view, this means that the treatment of duplicate names within a
JSON object is more or less up to the implementation.  Until now, the OVS
JSON parser has dealt with duplicates fairly badly: they all get shoved
into the hash table and you get one or the other value semi-randomly
(typically the one added later).  This commit makes the behavior
predictable: old values are deleted and replaced by newer values.

lib/json.c

index 10fa3c121011a88876a5b43097b70de89a608572..d26c89ed1c4535183ccf50ce12d328bf4716d29e 100644 (file)
@@ -277,7 +277,7 @@ json_real_create(double real)
 void
 json_object_put(struct json *json, const char *name, struct json *value)
 {
-    shash_add(json->u.object, name, value);
+    json_destroy(shash_replace(json->u.object, name, value));
 }
 
 void