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;
}