tools:iio: catch errors in string allocation
authorHartmut Knaack <knaack.h@gmx.de>
Sun, 31 May 2015 12:40:02 +0000 (14:40 +0200)
committerJonathan Cameron <jic23@kernel.org>
Sun, 31 May 2015 18:21:10 +0000 (19:21 +0100)
This patch catches errors in string allocation in generic_buffer.c,
iio_event_monitor.c, iio_utils.c and lsiio.c.

Signed-off-by: Hartmut Knaack <knaack.h@gmx.de>
Signed-off-by: Jonathan Cameron <jic23@kernel.org>
tools/iio/generic_buffer.c
tools/iio/iio_event_monitor.c
tools/iio/iio_utils.c
tools/iio/lsiio.c

index 4cd2464..eb89bc2 100644 (file)
@@ -234,7 +234,9 @@ int main(int argc, char **argv)
        }
        printf("iio device number being used is %d\n", dev_num);
 
-       asprintf(&dev_dir_name, "%siio:device%d", iio_dir, dev_num);
+       ret = asprintf(&dev_dir_name, "%siio:device%d", iio_dir, dev_num);
+       if (ret < 0)
+               return -ENOMEM;
 
        if (!notrigger) {
                if (trigger_name == NULL) {
index 578390d..1374374 100644 (file)
@@ -265,6 +265,8 @@ int main(int argc, char **argv)
                /* If we can't find a IIO device by name assume device_name is a
                   IIO chrdev */
                chrdev_name = strdup(device_name);
+               if (!chrdev_name)
+                       return -ENOMEM;
        }
 
        fd = open(chrdev_name, 0);
index 812153f..f0896f4 100644 (file)
@@ -36,7 +36,7 @@ int iioutils_break_up_name(const char *full_name,
        char *current;
        char *w, *r;
        char *working, *prefix = "";
-       int i;
+       int i, ret;
 
        for (i = 0; i < sizeof(iio_direction) / sizeof(iio_direction[0]); i++)
                if (!strncmp(full_name, iio_direction[i],
@@ -46,6 +46,9 @@ int iioutils_break_up_name(const char *full_name,
                }
 
        current = strdup(full_name + strlen(prefix) + 1);
+       if (!current)
+               return -ENOMEM;
+
        working = strtok(current, "_\0");
 
        w = working;
@@ -59,10 +62,10 @@ int iioutils_break_up_name(const char *full_name,
                r++;
        }
        *w = '\0';
-       asprintf(generic_name, "%s_%s", prefix, working);
+       ret = asprintf(generic_name, "%s_%s", prefix, working);
        free(current);
 
-       return 0;
+       return (ret == -1) ? -ENOMEM : 0;
 }
 
 /**
index 65a2385..daa6c53 100644 (file)
@@ -107,7 +107,12 @@ static void dump_devices(void)
                if (check_prefix(ent->d_name, type_device)) {
                        char *dev_dir_name;
 
-                       asprintf(&dev_dir_name, "%s%s", iio_dir, ent->d_name);
+                       if (asprintf(&dev_dir_name, "%s%s", iio_dir,
+                                    ent->d_name) < 0) {
+                               printf("Memory allocation failed\n");
+                               goto error_close_dir;
+                       }
+
                        dump_one_device(dev_dir_name);
                        free(dev_dir_name);
                        if (verblevel >= VERBLEVEL_SENSORS)
@@ -119,11 +124,17 @@ static void dump_devices(void)
                if (check_prefix(ent->d_name, type_trigger)) {
                        char *dev_dir_name;
 
-                       asprintf(&dev_dir_name, "%s%s", iio_dir, ent->d_name);
+                       if (asprintf(&dev_dir_name, "%s%s", iio_dir,
+                                    ent->d_name) < 0) {
+                               printf("Memory allocation failed\n");
+                               goto error_close_dir;
+                       }
+
                        dump_one_trigger(dev_dir_name);
                        free(dev_dir_name);
                }
        }
+error_close_dir:
        closedir(dp);
 }