diff --git a/src/base/net/tools/LineReader.cpp b/src/base/net/tools/LineReader.cpp index 646852bf6..946cdec4a 100644 --- a/src/base/net/tools/LineReader.cpp +++ b/src/base/net/tools/LineReader.cpp @@ -38,12 +38,7 @@ void xmrig::LineReader::parse(char *data, size_t size) return; } - if (!m_buf) { - return getline(data, size); - } - - add(data, size); - getline(m_buf, m_pos); + getline(data, size); } @@ -60,6 +55,7 @@ void xmrig::LineReader::reset() void xmrig::LineReader::add(const char *data, size_t size) { if (size > NetBuffer::kChunkSize - m_pos) { + // it breakes correctness silently for long lines return; } @@ -85,7 +81,12 @@ void xmrig::LineReader::getline(char *data, size_t size) end++; const auto len = static_cast<size_t>(end - start); - if (len > 1) { + if (m_pos) { + add(start, len); + m_listener->onLine(m_buf, m_pos - 1); + m_pos = 0; + } + else if (len > 1) { m_listener->onLine(start, len - 1); } @@ -97,7 +98,5 @@ void xmrig::LineReader::getline(char *data, size_t size) return reset(); } - if (!m_buf || m_buf != data) { - add(start, remaining); - } + add(start, remaining); }