From 0cfbb0797ba1788e131cf964ca53adcde8209e1f Mon Sep 17 00:00:00 2001 From: Ken Gaillot Date: Thu, 21 Mar 2019 09:20:32 -0500 Subject: [PATCH] Fix: libcrmcommon: pcmk_nvpair_t should handle NULL values Detected by static analysis; if pcmk_prepend_nvpair() were given a NULL value, pcmk__new_nvpair() would try to strdup() it. Now, name is asserted to be non-NULL, and NULL values are set directly. --- lib/common/nvpair.c | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/lib/common/nvpair.c b/lib/common/nvpair.c index 5d6853f..e9fec8a 100644 --- a/lib/common/nvpair.c +++ b/lib/common/nvpair.c @@ -33,7 +33,7 @@ * \internal * \brief Allocate a new name/value pair * - * \param[in] name New name + * \param[in] name New name (required) * \param[in] value New value * * \return Newly allocated name/value pair @@ -43,11 +43,15 @@ static pcmk_nvpair_t * pcmk__new_nvpair(const char *name, const char *value) { - pcmk_nvpair_t *nvpair = calloc(1, sizeof(pcmk_nvpair_t)); + pcmk_nvpair_t *nvpair = NULL; + CRM_ASSERT(name); + + nvpair = calloc(1, sizeof(pcmk_nvpair_t)); CRM_ASSERT(nvpair); + nvpair->name = strdup(name); - nvpair->value = strdup(value); + nvpair->value = value? strdup(value) : NULL; return nvpair; } -- 1.8.3.1