From 285d922bd8f2358ac40c8fa6ecfbab087c4e6081 Mon Sep 17 00:00:00 2001
From: Shaun Roe <shaun.roe@cern.ch>
Date: Tue, 25 Mar 2025 11:41:24 +0100
Subject: [PATCH] check malloc return

---
 LumiBlock/LumiCalc/src/cmdline.cxx | 69 ++++++++++++++++++------------
 1 file changed, 42 insertions(+), 27 deletions(-)

diff --git a/LumiBlock/LumiCalc/src/cmdline.cxx b/LumiBlock/LumiCalc/src/cmdline.cxx
index 5eb31e6dcdf8..9cfda2c74ea1 100644
--- a/LumiBlock/LumiCalc/src/cmdline.cxx
+++ b/LumiBlock/LumiCalc/src/cmdline.cxx
@@ -309,10 +309,12 @@ struct generic_list
  */
 static void add_node(struct generic_list **list) {
   struct generic_list *new_node = (struct generic_list *) malloc (sizeof (struct generic_list));
-  new_node->next = *list;
-  *list = new_node;
-  new_node->arg.string_arg = 0;
-  new_node->orig = 0;
+  if (new_node){
+    new_node->next = *list;
+    *list = new_node;
+    new_node->arg.string_arg = 0;
+    new_node->orig = 0;
+  }
 }
 
 /**
@@ -551,21 +553,22 @@ get_multiple_arg_token(const char *arg)
   len -= num_of_escape;
 
   ret = (char *) malloc (len);
-
-  i = 0;
-  j = 0;
-  while (arg[i] && (j < len-1))
-    {
-      if (arg[i] == '\\' && 
-	  arg[ i + 1 ] && 
-	  arg[ i + 1 ] == ',')
-        ++i;
-
-      ret[j++] = arg[i++];
-    }
-
-  ret[len-1] = '\0';
-
+  if (ret){
+  
+    i = 0;
+    j = 0;
+    while (arg[i] && (j < len-1))
+      {
+        if (arg[i] == '\\' && 
+      arg[ i + 1 ] && 
+      arg[ i + 1 ] == ',')
+          ++i;
+  
+        ret[j++] = arg[i++];
+      }
+  
+    ret[len-1] = '\0';
+  }
   return ret;
 }
 
@@ -980,27 +983,39 @@ void update_multiple_arg(void *field, char ***orig_field,
       switch(arg_type) {
       case ARG_INT:
         if (! *((int **)field)) {
-          *((int **)field) = (int *)malloc (sizeof (int));
-          (*((int **)field))[0] = default_value->int_arg; 
+          int* pi = (int *)malloc (sizeof (int));
+          if (pi){
+            *((int **)field) = pi;
+            (*((int **)field))[0] = default_value->int_arg;
+          }
         }
         break;
       case ARG_DOUBLE:
         if (! *((double **)field)) {
-          *((double **)field) = (double *)malloc (sizeof (double));
-          (*((double **)field))[0] = default_value->double_arg;
+          double * pd = (double *)malloc (sizeof (double));
+          if (pd){
+            *((double **)field) = pd;
+            (*((double **)field))[0] = default_value->double_arg;
+          }
         }
         break;
       case ARG_STRING:
         if (! *((char ***)field)) {
-          *((char ***)field) = (char **)malloc (sizeof (char *));
-          (*((char ***)field))[0] = gengetopt_strdup(default_value->string_arg);
+          char ** pc = (char **)malloc (sizeof (char *));
+          if (pc){
+            *((char ***)field) = pc;
+            (*((char ***)field))[0] = gengetopt_strdup(default_value->string_arg);
+          }
         }
         break;
       default: break;
       }
       if (!(*orig_field)) {
-        *orig_field = (char **) malloc (sizeof (char *));
-        (*orig_field)[0] = 0;
+        char ** pc = (char **)malloc (sizeof (char *));
+        if (pc){
+          *orig_field = (char **) malloc (sizeof (char *));
+          (*orig_field)[0] = 0;
+        }
       }
     }
   }
-- 
GitLab