resource-client: fix possible NULL pointer bug.
authorIsmo Puustinen <ismo.puustinen@intel.com>
Wed, 24 Jul 2013 07:25:39 +0000 (10:25 +0300)
committerIsmo Puustinen <ismo.puustinen@intel.com>
Wed, 24 Jul 2013 07:44:08 +0000 (10:44 +0300)
src/plugins/resource-native/resource-client.c

index 1bfa269..ead5c88 100644 (file)
@@ -300,7 +300,7 @@ static attribute_array_t *attribute_array_dup(uint32_t dim, attribute_t *arr)
     uint32_t i;
     attribute_t *sattr, *dattr;
     attribute_array_t *dup;
-    int err;
+    int err = ENOMEM;
 
     MRP_ASSERT(dim < ARRAY_MAX && arr, "invalid argument");
 
@@ -312,7 +312,6 @@ static attribute_array_t *attribute_array_dup(uint32_t dim, attribute_t *arr)
     size = sizeof(attribute_array_t) + (sizeof(attribute_t) * (dim + 1));
 
     if (!(dup = mrp_allocz(size))) {
-        err = ENOMEM;
         goto failed;
     }
 
@@ -323,14 +322,12 @@ static attribute_array_t *attribute_array_dup(uint32_t dim, attribute_t *arr)
         dattr = dup->elems + i;
 
         if (!(dattr->name = mrp_strdup(sattr->name))) {
-            err = ENOMEM;
             goto failed;
         }
 
         switch ((dattr->type = sattr->type)) {
         case 's':
             if (!(dattr->v.string = mrp_strdup(sattr->v.string))) {
-                err = ENOMEM;
                 goto failed;
             }
             break;
@@ -1595,7 +1592,8 @@ static void sighandler(mrp_sighandler_t *h, int signum, void *user_data)
     case SIGHUP:
     case SIGTERM:
     case SIGINT:
-        mrp_mainloop_quit(ml, 0);
+        if (ml)
+            mrp_mainloop_quit(ml, 0);
         break;
 
     default:
@@ -1698,6 +1696,9 @@ int main(int argc, char **argv)
     client->prompt  = false;
     client->rset_id = INVALID_ID;
 
+    if (!client->ml || !client->name)
+        exit(1);
+
     parse_arguments(client, argc, argv);
 
     mrp_add_sighandler(client->ml, SIGHUP , sighandler, client);