Mon, 19 May 2025 15:34:30 +0200
fix critical bug in string iteration
some temporaries did not materialize long enough - fixed that by assigning them to lvalues
src/heatmap.cpp | file | annotate | diff | comparison | revisions |
--- a/src/heatmap.cpp Mon May 19 15:10:11 2025 +0200 +++ b/src/heatmap.cpp Mon May 19 15:34:30 2025 +0200 @@ -33,14 +33,16 @@ void fm::heatmap::add(const fm::settings &settings, const std::string &log) { using std::string_view_literals::operator ""sv; - for (auto &&line: std::views::split(log, "\n"sv)) { + for (auto line: std::views::split(log, "\n"sv)) { if (line.empty()) continue; - auto parts = std::views::split(line, "#"sv).begin(); - std::string author{settings.map_author({(*parts).begin(), (*parts).end()})}; + auto parts = std::views::split(line, "#"sv); + auto parts_iter = parts.begin(); + std::string author{settings.map_author(std::string_view{*parts_iter})}; int year = 0; unsigned int month = 0, day = 0; - auto date_parts = std::views::split(*++parts, "-"sv) + ++parts_iter; + auto date_parts = std::views::split(*parts_iter, "-"sv) | std::views::transform([](auto r) { return std::string_view(r); }) | std::ranges::to<std::vector>(); std::from_chars(date_parts[0].begin(), date_parts[0].end(), year);