From ee7ff024c143e9d82b792694597562544ca24708 Mon Sep 17 00:00:00 2001 From: Milan Broz Date: Wed, 2 Jan 2019 13:59:04 +0100 Subject: [PATCH] Use json_object_object_add_ex if defined. The json-c lib changed json_object_object_add() prototype to return int, this is backward incompatible. --- configure.ac | 1 + lib/luks2/luks2_json_metadata.c | 24 ++++++++++++------------ 2 files changed, 13 insertions(+), 12 deletions(-) diff --git a/configure.ac b/configure.ac index d0b2f831..86c6fc4c 100644 --- a/configure.ac +++ b/configure.ac @@ -352,6 +352,7 @@ LIBS=$saved_LIBS dnl Check for JSON-C used in LUKS2 PKG_CHECK_MODULES([JSON_C], [json-c]) +AC_CHECK_DECLS([json_object_object_add_ex], [], [], [#include ]) dnl Crypto backend configuration. AC_ARG_WITH([crypto_backend], diff --git a/lib/luks2/luks2_json_metadata.c b/lib/luks2/luks2_json_metadata.c index e27cc959..d674fb5d 100644 --- a/lib/luks2/luks2_json_metadata.c +++ b/lib/luks2/luks2_json_metadata.c @@ -1963,24 +1963,24 @@ void LUKS2_hdr_repair(struct crypt_device *cd, json_object *hdr_jobj) void json_object_object_del_by_uint(json_object *jobj, unsigned key) { - int r; - char key_name[4]; + char key_name[16]; - r = snprintf(key_name, sizeof(key_name), "%u", key); - if (r >= 0 && (size_t)r < sizeof(key_name)) - json_object_object_del(jobj, key_name); + if (snprintf(key_name, sizeof(key_name), "%u", key) < 1) + return; + json_object_object_del(jobj, key_name); } int json_object_object_add_by_uint(json_object *jobj, unsigned key, json_object *jobj_val) { - int r; - char key_name[4]; + char key_name[16]; - r = snprintf(key_name, sizeof(key_name), "%u", key); - if (r < 0 || (size_t)r >= sizeof(key_name)) + if (snprintf(key_name, sizeof(key_name), "%u", key) < 1) return -EINVAL; - json_object_object_add(jobj, key_name, jobj_val); - - return 0; +#if HAVE_DECL_JSON_OBJECT_OBJECT_ADD_EX + return json_object_object_add_ex(jobj, key_name, jobj_val, 0) ? -ENOMEM : 0; +#else + json_object_object_add(jobj, key_name, jobj_val); + return 0; +#endif }