From 2b485a3f62e77c5b4038630c750fd91af28bfa33 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Tue, 20 Aug 2024 04:10:15 -0400 Subject: [PATCH] be more paranoid about cleaning up --- src/text_file_reader.cpp | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/src/text_file_reader.cpp b/src/text_file_reader.cpp index bc274e42fa..715e82ab32 100644 --- a/src/text_file_reader.cpp +++ b/src/text_file_reader.cpp @@ -86,7 +86,10 @@ TextFileReader::TextFileReader(FILE *fp, std::string filetype) : TextFileReader::~TextFileReader() { - if (closefp) fclose(fp); + if (closefp) { + if (fp) fclose(fp); + fp = nullptr; + } delete[] line; } @@ -97,6 +100,10 @@ void TextFileReader::set_bufsize(int newsize) if (newsize < 100) { delete[] line; line = nullptr; + if (closefp) { + fclose(fp); + fp = nullptr; + } throw FileReaderException( fmt::format("line buffer size {} for {} file too small, must be > 100", newsize, filetype)); } @@ -116,11 +123,16 @@ void TextFileReader::rewind() void TextFileReader::skip_line() { + if (!line) return; char *ptr = fgets(line, bufsize, fp); if (ptr == nullptr) { // EOF delete[] line; line = nullptr; + if (closefp) { + fclose(fp); + fp = nullptr; + } throw EOFException(fmt::format("Missing line in {} file!", filetype)); } } @@ -145,6 +157,7 @@ char *TextFileReader::next_line(int nparams) int n = 0; int nwords = 0; + if (!line) return nullptr; char *ptr = fgets(line, bufsize, fp); if (ptr == nullptr) {