Skip to content
Snippets Groups Projects
Unverified Commit 912df7df authored by Martin Hořeňovský's avatar Martin Hořeňovský
Browse files

Fix quadratic runtime when linebreaking strings without newlines

The problem was that every line would iterate from current line
start position to the end of the string, looking for a newline
to break on, leading to accidentally quadratic runtime. With this
change, the code only ever searches up to the current line's
length and not more.

Credit to @jorgenpt for the fix suggestion.

Closes #2315
parent 931f41b4
Branches
No related tags found
No related merge requests found
......@@ -6,6 +6,8 @@
// SPDX-License-Identifier: BSL-1.0
#include <catch2/internal/catch_textflow.hpp>
#include <algorithm>
#include <cstring>
#include <ostream>
......@@ -41,13 +43,16 @@ namespace Catch {
void Column::const_iterator::calcLength() {
m_addHyphen = false;
const auto maxLineLength = m_column.m_width - indentSize();
m_parsedTo = m_lineStart;
std::string const& current_line = m_column.m_string;
if ( current_line[m_lineStart] == '\n' ) {
++m_parsedTo;
}
while ( m_parsedTo < current_line.size() &&
const auto maxLineLength = m_column.m_width - indentSize();
const auto maxParseTo = std::min(current_line.size(), m_lineStart + maxLineLength);
while ( m_parsedTo < maxParseTo &&
current_line[m_parsedTo] != '\n' ) {
++m_parsedTo;
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment