chiark / gitweb /
collect: check realloc return value
[elogind.git] / extras / collect / collect.c
index feb0e7576871551e6e5984c32a0e43d51a79b9dc..9fb6737d9b4d6af94877d5b2efdb39c96ad7053e 100644 (file)
@@ -53,7 +53,7 @@ static LIST_HEAD(bunch);
 static int debug;
 
 /* This can increase dynamically */
-static int bufsize = BUFSIZE;
+static size_t bufsize = BUFSIZE;
 
 static void sig_alrm(int signo)
 {
@@ -272,8 +272,15 @@ static int missing(int fd)
                        ret++;
                } else {
                        while (strlen(him->name)+1 >= bufsize) {
+                               char *tmpbuf;
+
                                bufsize = bufsize << 1;
-                               buf = realloc(buf, bufsize);
+                               tmpbuf = realloc(buf, bufsize);
+                               if (!tmpbuf) {
+                                       free(buf);
+                                       return -1;
+                               }
+                               buf = tmpbuf;
                        }
                        snprintf(buf, strlen(him->name)+2, "%s ", him->name);
                        write(fd, buf, strlen(buf));