From 6208981ad362ab8e995198d16836985e7daae8aa Mon Sep 17 00:00:00 2001 From: twinaphex Date: Mon, 22 Jan 2018 21:32:36 +0100 Subject: [PATCH] filestream_getline - be safer --- libretro-common/streams/file_stream.c | 26 ++++++++++++++++---------- 1 file changed, 16 insertions(+), 10 deletions(-) diff --git a/libretro-common/streams/file_stream.c b/libretro-common/streams/file_stream.c index 2e72402f45..38efa2d7c5 100644 --- a/libretro-common/streams/file_stream.c +++ b/libretro-common/streams/file_stream.c @@ -460,21 +460,27 @@ bool filestream_write_file(const char *path, const void *data, ssize_t size) char *filestream_getline(RFILE *stream) { - char* newline = (char*)malloc(9); - char* newline_tmp = NULL; - size_t cur_size = 8; - size_t idx = 0; - int in = filestream_getc(stream); + char* newline_tmp = NULL; + size_t cur_size = 8; + size_t idx = 0; + int in = 0; + char* newline = (char*)malloc(9); - if (!newline) + if (!stream || !newline) + { + if (newline) + free(newline); return NULL; + } + + in = filestream_getc(stream); while (in != EOF && in != '\n') { if (idx == cur_size) { - cur_size *= 2; - newline_tmp = (char*)realloc(newline, cur_size + 1); + cur_size *= 2; + newline_tmp = (char*)realloc(newline, cur_size + 1); if (!newline_tmp) { @@ -482,13 +488,13 @@ char *filestream_getline(RFILE *stream) return NULL; } - newline = newline_tmp; + newline = newline_tmp; } newline[idx++] = in; in = filestream_getc(stream); } - newline[idx] = '\0'; + newline[idx] = '\0'; return newline; }