]> www.infradead.org Git - users/sagi/nvme-cli.git/commitdiff
json: fix seg. fault converting NULL to JSON string
authorMartin Belanger <martin.belanger@dell.com>
Thu, 3 Aug 2023 17:15:28 +0000 (13:15 -0400)
committerDaniel Wagner <wagi@monom.org>
Fri, 4 Aug 2023 14:09:28 +0000 (16:09 +0200)
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 <martin.belanger@dell.com>
util/json.h

index c362408b7e7946b8f88a260209254ace8c71b60b..54e33e397ea416c0007d48b26cf4e1a01522cdb5 100644 (file)
        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 |                               \