File pacemaker#3394-0003-Low-libcrmcommon-NULL-check-strdup-in-pcmk__register.patch of Package pacemaker.38495

From fad740e877849b49cb9956681ab54a5663ffeab0 Mon Sep 17 00:00:00 2001
From: Reid Wahl <nrwahl@protonmail.com>
Date: Wed, 20 Mar 2024 20:05:06 -0700
Subject: [PATCH 3/4] Low: libcrmcommon: NULL-check strdup() in
 pcmk__register_format()

Dereferencing null pointer found by cppcheck.

Return ENOMEM instead of asserting since this is a library function that
returns a standard Pacemaker return code. However, nothing checks it,
and it would have segfaulted in the past, so it might be better to
assert here.

Signed-off-by: Reid Wahl <nrwahl@protonmail.com>
---
 lib/common/output.c | 9 ++++++++-
 1 file changed, 8 insertions(+), 1 deletion(-)

Index: pacemaker-2.0.5+20201202.ba59be712/lib/common/output.c
===================================================================
--- pacemaker-2.0.5+20201202.ba59be712.orig/lib/common/output.c
+++ pacemaker-2.0.5+20201202.ba59be712/lib/common/output.c
@@ -81,10 +81,17 @@ pcmk__output_new(pcmk__output_t **out, c
 int
 pcmk__register_format(GOptionGroup *group, const char *name,
                       pcmk__output_factory_t create, GOptionEntry *options) {
+    char *name_copy = NULL;
+
     if (create == NULL) {
         return -EINVAL;
     }
 
+    name_copy = strdup(name);
+    if (name_copy == NULL) {
+        return ENOMEM;
+    }
+
     if (formatters == NULL) {
         formatters = g_hash_table_new_full(crm_str_hash, g_str_equal, free, NULL);
     }
@@ -93,7 +100,7 @@ pcmk__register_format(GOptionGroup *grou
         g_option_group_add_entries(group, options);
     }
 
-    g_hash_table_insert(formatters, strdup(name), create);
+    g_hash_table_insert(formatters, name_copy, create);
     return 0;
 }
 
openSUSE Build Service is sponsored by