Author: sveinung
Date: Wed May 10 10:14:40 2017
New Revision: 35473

URL: http://svn.gna.org/viewcvs/freeciv?rev=35473&view=rev
Log:
JSON protocol: fix sub field sending memory leak.

Steal the references to values created inline when put inside an object by
using json_object_set_new() rather than json_object_set().

Found with Valgrind.
Reported by Andreas Røsdal

See hrm Bug #658386

Modified:
    trunk/common/networking/dataio_json.c

Modified: trunk/common/networking/dataio_json.c
URL: 
http://svn.gna.org/viewcvs/freeciv/trunk/common/networking/dataio_json.c?rev=35473&r1=35472&r2=35473&view=diff
==============================================================================
--- trunk/common/networking/dataio_json.c       (original)
+++ trunk/common/networking/dataio_json.c       Wed May 10 10:14:40 2017
@@ -239,9 +239,9 @@
 
     location->sub_location->number = i;
 
-    json_object_set(universal, "kind", json_integer(pcp->kind));
-    json_object_set(universal, "value",
-                    json_integer(universal_number(pcp)));
+    json_object_set_new(universal, "kind", json_integer(pcp->kind));
+    json_object_set_new(universal, "value",
+                        json_integer(universal_number(pcp)));
 
     plocation_write_data(dout->json, location, universal);
   }
@@ -708,14 +708,14 @@
 
   /* Write the requirement values to the fields of the requirement
    * object. */
-  json_object_set(requirement, "kind", json_integer(kind));
-  json_object_set(requirement, "value", json_integer(value));
-
-  json_object_set(requirement, "range", json_integer(range));
-
-  json_object_set(requirement, "survives", json_boolean(survives));
-  json_object_set(requirement, "present", json_boolean(present));
-  json_object_set(requirement, "quiet", json_boolean(quiet));
+  json_object_set_new(requirement, "kind", json_integer(kind));
+  json_object_set_new(requirement, "value", json_integer(value));
+
+  json_object_set_new(requirement, "range", json_integer(range));
+
+  json_object_set_new(requirement, "survives", json_boolean(survives));
+  json_object_set_new(requirement, "present", json_boolean(present));
+  json_object_set_new(requirement, "quiet", json_boolean(quiet));
 
   /* Put the requirement object in the packet. */
   plocation_write_data(dout->json, location, requirement);
@@ -733,8 +733,8 @@
 
   /* Write the action probability values to the fields of the action
    * probability object. */
-  json_object_set(action_probability, "min", json_integer(prob->min));
-  json_object_set(action_probability, "max", json_integer(prob->max));
+  json_object_set_new(action_probability, "min", json_integer(prob->min));
+  json_object_set_new(action_probability, "max", json_integer(prob->max));
 
   /* Put the action probability object in the packet. */
   plocation_write_data(dout->json, location, action_probability);


_______________________________________________
Freeciv-commits mailing list
Freeciv-commits@gna.org
https://mail.gna.org/listinfo/freeciv-commits

Reply via email to