From b9a6c07bb7912a29debfe0a3ee99e6b813828507 Mon Sep 17 00:00:00 2001 From: asynts Date: Thu, 3 Sep 2020 19:08:04 +0200 Subject: [PATCH] LibCore: FileStream.h: Fix infinite loop when trying to read past end-of-file. --- Libraries/LibCore/FileStream.h | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/Libraries/LibCore/FileStream.h b/Libraries/LibCore/FileStream.h index 85c87af7c2..28975ff4d1 100644 --- a/Libraries/LibCore/FileStream.h +++ b/Libraries/LibCore/FileStream.h @@ -65,16 +65,15 @@ public: size_t read(Bytes bytes) override { - size_t nread = 0; + auto nread = m_buffered.bytes().copy_trimmed_to(bytes); - if (!m_buffered.is_empty()) { - nread += m_buffered.bytes().copy_trimmed_to(bytes); + m_buffered.bytes().slice(nread, m_buffered.size() - nread).copy_to(m_buffered); + m_buffered.trim(m_buffered.size() - nread); - m_buffered.bytes().slice(nread).copy_to(m_buffered); - m_buffered.trim(m_buffered.size() - nread); - } + while (nread < bytes.size()) { + if (m_file->eof()) + return nread; - while (nread < bytes.size() && !eof()) { if (m_file->has_error()) { set_fatal_error(); return 0;