From 52f57ec18a01891b16ff0a76d730f3f888b6d4ff Mon Sep 17 00:00:00 2001 From: Sangamesh Mallayya Date: Mon, 21 Sep 2026 00:58:21 -0500 Subject: [PATCH] AIX: Fix test_json_patch NULL pointer passed to printf Some test_json_patch test cases have neither a comment field and nor a error field, so the expression "comment ? comment : error_s" evaluates to NULL. The printf statement printf("Testing '%s', ...", comment ? comment : error_s, ...); passes NULL as a %s argument. GNU libc handles this gracefully and prints (null). On AIX, passing NULL for %s prints an empty string, causing the test output to differ from the expected file. The fix adds a simple macro: define STR_OR_NULL(s) ((s) ? (s) : "(null)") that retruns "(null)" when s is NULL. --- tests/test_json_patch.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/tests/test_json_patch.c b/tests/test_json_patch.c index eeb791c..6acbce6 100644 --- a/tests/test_json_patch.c +++ b/tests/test_json_patch.c @@ -16,6 +16,11 @@ #define PATH_MAX 256 #endif +/* printf("%s", NULL) prints emptry string on AIX. + * Use this macro to guard all printf %s args that may be NULL*/ +#define STR_OR_NULL(s) ((s) ? (s) : "(null)") + + void test_json_patch_op(struct json_object *jo) { const char *comment = json_object_get_string(json_object_object_get(jo, "comment")); @@ -29,7 +34,7 @@ void test_json_patch_op(struct json_object *jo) int ret; printf("Testing '%s', doc '%s' patch '%s' : ", - comment ? comment : error_s, + STR_OR_NULL(comment ? comment : error_s), json_object_get_string(doc), json_object_get_string(patch)); if (!error && !have_expected) {