From 4c6c65e70cbe1e6b4b409ba18b71b2a8fb251d83 Mon Sep 17 00:00:00 2001 From: Drew DeVault Date: Thu, 15 Dec 2016 17:08:56 -0500 Subject: [PATCH] Handle malloc failures from read_line --- common/readline.c | 3 +++ sway/config.c | 3 +++ sway/main.c | 15 ++++++++++++--- 3 files changed, 18 insertions(+), 3 deletions(-) diff --git a/common/readline.c b/common/readline.c index 5106172c3..cc40a2cc1 100644 --- a/common/readline.c +++ b/common/readline.c @@ -1,4 +1,5 @@ #include "readline.h" +#include "log.h" #include #include @@ -7,6 +8,7 @@ char *read_line(FILE *file) { char *string = malloc(size); char lastChar = '\0'; if (!string) { + sway_log(L_ERROR, "Unable to allocate memory for read_line"); return NULL; } while (1) { @@ -27,6 +29,7 @@ char *read_line(FILE *file) { char *new_string = realloc(string, size *= 2); if (!new_string) { free(string); + sway_log(L_ERROR, "Unable to allocate memory for read_line"); return NULL; } string = new_string; diff --git a/sway/config.c b/sway/config.c index e737f83c4..981099376 100644 --- a/sway/config.c +++ b/sway/config.c @@ -575,6 +575,9 @@ bool read_config(FILE *file, struct sway_config *config) { char *line; while (!feof(file)) { line = read_line(file); + if (!line) { + continue; + } line_number++; line = strip_whitespace(line); if (line[0] == '#') { diff --git a/sway/main.c b/sway/main.c index 157c61b34..d41eb292b 100644 --- a/sway/main.c +++ b/sway/main.c @@ -53,7 +53,10 @@ void detect_proprietary() { return; } while (!feof(f)) { - char *line = read_line(f); + char *line; + if (!(line = read_line(f))) { + break; + } if (strstr(line, "nvidia")) { fprintf(stderr, "\x1B[1;31mWarning: Proprietary nvidia drivers do NOT support Wayland. Use nouveau.\x1B[0m\n"); fprintf(stderr, "\x1B[1;31mYes, they STILL don't work with the newly announced wayland \"support\".\x1B[0m\n"); @@ -118,7 +121,10 @@ static void log_distro() { if (f) { sway_log(L_INFO, "Contents of %s:", paths[i]); while (!feof(f)) { - char *line = read_line(f); + char *line; + if (!(line = read_line(f))) { + break; + } if (*line) { sway_log(L_INFO, "%s", line); } @@ -136,7 +142,10 @@ static void log_kernel() { return; } while (!feof(f)) { - char *line = read_line(f); + char *line; + if (!(line = read_line(f))) { + break; + } if (*line) { sway_log(L_INFO, "%s", line); }