Handle malloc failures from read_line

This commit is contained in:
Drew DeVault 2016-12-15 17:08:56 -05:00
parent 9ad1e6b40f
commit 4c6c65e70c
3 changed files with 18 additions and 3 deletions

View file

@ -1,4 +1,5 @@
#include "readline.h" #include "readline.h"
#include "log.h"
#include <stdlib.h> #include <stdlib.h>
#include <stdio.h> #include <stdio.h>
@ -7,6 +8,7 @@ char *read_line(FILE *file) {
char *string = malloc(size); char *string = malloc(size);
char lastChar = '\0'; char lastChar = '\0';
if (!string) { if (!string) {
sway_log(L_ERROR, "Unable to allocate memory for read_line");
return NULL; return NULL;
} }
while (1) { while (1) {
@ -27,6 +29,7 @@ char *read_line(FILE *file) {
char *new_string = realloc(string, size *= 2); char *new_string = realloc(string, size *= 2);
if (!new_string) { if (!new_string) {
free(string); free(string);
sway_log(L_ERROR, "Unable to allocate memory for read_line");
return NULL; return NULL;
} }
string = new_string; string = new_string;

View file

@ -575,6 +575,9 @@ bool read_config(FILE *file, struct sway_config *config) {
char *line; char *line;
while (!feof(file)) { while (!feof(file)) {
line = read_line(file); line = read_line(file);
if (!line) {
continue;
}
line_number++; line_number++;
line = strip_whitespace(line); line = strip_whitespace(line);
if (line[0] == '#') { if (line[0] == '#') {

View file

@ -53,7 +53,10 @@ void detect_proprietary() {
return; return;
} }
while (!feof(f)) { while (!feof(f)) {
char *line = read_line(f); char *line;
if (!(line = read_line(f))) {
break;
}
if (strstr(line, "nvidia")) { 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;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"); 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) { if (f) {
sway_log(L_INFO, "Contents of %s:", paths[i]); sway_log(L_INFO, "Contents of %s:", paths[i]);
while (!feof(f)) { while (!feof(f)) {
char *line = read_line(f); char *line;
if (!(line = read_line(f))) {
break;
}
if (*line) { if (*line) {
sway_log(L_INFO, "%s", line); sway_log(L_INFO, "%s", line);
} }
@ -136,7 +142,10 @@ static void log_kernel() {
return; return;
} }
while (!feof(f)) { while (!feof(f)) {
char *line = read_line(f); char *line;
if (!(line = read_line(f))) {
break;
}
if (*line) { if (*line) {
sway_log(L_INFO, "%s", line); sway_log(L_INFO, "%s", line);
} }