]> git.ipfire.org Git - thirdparty/json-c.git/commitdiff
free objects outside assert() in json_object_put 936/head
authorJavid Khan <dxbjavid@gmail.com>
Tue, 30 Jun 2026 13:24:06 +0000 (18:54 +0530)
committerJavid Khan <dxbjavid@gmail.com>
Tue, 30 Jun 2026 13:24:06 +0000 (18:54 +0530)
json_object.c

index 0a619679bd7ea9f0499bdbe1cfc0e55fdd3c1301..bbdc888940dca41beeb2971e8d0b4da22c2b5087 100644 (file)
@@ -435,11 +435,16 @@ int json_object_put(struct json_object *jso)
                // All slots are cleared, now pop back up to the parent
                {
                        json_object *parent = jso->_delete_parent;
+                       int rc;
                        // jso is a child that's already been detached from its parent
                        // so we need to actually free it now
                        assert(jso->_ref_count == 0);
                        jso->_ref_count++;   // We're the exclusive owner of jso, non-atomic add is ok.
-                       assert(_json_object_put_maybe_free(jso, 1) == 0);
+                       // Note: the call must not be inside assert(), or it gets
+                       // compiled out when NDEBUG is defined and the memory leaks.
+                       rc = _json_object_put_maybe_free(jso, 1);
+                       assert(rc == 0);
+                       (void)rc;
                        jso = parent;
                        // iteration will be reset at the top of the loop
                }