From: Martin Belanger Date: Thu, 3 Aug 2023 17:15:28 +0000 (-0400) Subject: json: fix seg. fault converting NULL to JSON string X-Git-Tag: v2.6~62 X-Git-Url: https://www.infradead.org/git/?a=commitdiff_plain;h=fda312dc3aec8bae996f7731ab2f249b8b58d6e6;p=users%2Fsagi%2Fnvme-cli.git json: fix seg. fault converting NULL to JSON string The function json_object_new_string() seg. faults when passed a NULL pointer. This can happen, for example, when parameters retuned by a controller (e.g. Firmware, Model Number, Serial Number, etc.) are undefined and therefore NULL. This will cause the following command to crash: nvme list -v -o json Signed-off-by: Martin Belanger --- diff --git a/util/json.h b/util/json.h index c362408b..54e33e39 100644 --- a/util/json.h +++ b/util/json.h @@ -28,16 +28,18 @@ json_object_object_add(o, k, util_json_object_new_double(v)) #define json_object_add_value_float(o, k, v) \ json_object_object_add(o, k, json_object_new_double(v)) -#define json_object_add_value_string(o, k, v) \ - json_object_object_add(o, k, json_object_new_string(v)) +static inline int json_object_add_value_string(struct json_object *o, const char *k, const char *v) { + return json_object_object_add(o, k, v ? json_object_new_string(v) : NULL); +} #define json_object_add_value_array(o, k, v) \ json_object_object_add(o, k, v) #define json_object_add_value_object(o, k, v) \ json_object_object_add(o, k, v) #define json_array_add_value_object(o, k) \ json_object_array_add(o, k) -#define json_array_add_value_string(o, v) \ - json_object_array_add(o, json_object_new_string(v)) +static inline int json_array_add_value_string(struct json_object *o, const char *v) { + return json_object_array_add(o, v ? json_object_new_string(v) : NULL); +} #define json_print_object(o, u) \ printf("%s", json_object_to_json_string_ext(o, \ JSON_C_TO_STRING_PRETTY | \