From f291fa81c6f21d925ea771a8cca597f5886309cc Mon Sep 17 00:00:00 2001 From: Javid Khan Date: Tue, 30 Jun 2026 18:54:06 +0530 Subject: [PATCH] free objects outside assert() in json_object_put --- json_object.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/json_object.c b/json_object.c index 0a61967..bbdc888 100644 --- a/json_object.c +++ b/json_object.c @@ -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 } -- 2.47.3