diff --git a/include/spdlog/details/log_msg.h b/include/spdlog/details/log_msg.h index 83138050..44de0743 100644 --- a/include/spdlog/details/log_msg.h +++ b/include/spdlog/details/log_msg.h @@ -9,7 +9,6 @@ namespace spdlog { namespace details { -const size_t MAX_RANGES = 5; struct SPDLOG_API log_msg { log_msg() = default; diff --git a/include/spdlog/sinks/ansicolor_sink-inl.h b/include/spdlog/sinks/ansicolor_sink-inl.h index eaba7c09..1a617d2e 100644 --- a/include/spdlog/sinks/ansicolor_sink-inl.h +++ b/include/spdlog/sinks/ansicolor_sink-inl.h @@ -44,9 +44,9 @@ SPDLOG_INLINE void ansicolor_sink::log(const details::log_msg &msg // If color is not supported in the terminal, log as is instead. std::lock_guard lock(mutex_); msg.num_start_ranges = 0; - memset(msg.color_ranges_start, 0, sizeof(size_t) * spdlog::details::MAX_RANGES); + memset(msg.color_ranges_start, 0, sizeof(size_t) * MAX_RANGES); msg.num_end_ranges = 0; - memset(msg.color_ranges_end, 0, sizeof(size_t) * spdlog::details::MAX_RANGES); + memset(msg.color_ranges_end, 0, sizeof(size_t) * MAX_RANGES); memory_buf_t formatted; formatter_->format(msg, formatted); if (should_do_colors_ && msg.num_start_ranges == msg.num_end_ranges) diff --git a/include/spdlog/tweakme.h b/include/spdlog/tweakme.h index 244bc3b3..564e9bc7 100644 --- a/include/spdlog/tweakme.h +++ b/include/spdlog/tweakme.h @@ -114,3 +114,10 @@ // // #define SPDLOG_FUNCTION __PRETTY_FUNCTION__ /////////////////////////////////////////////////////////////////////////////// + + +/////////////////////////////////////////////////////////////////////////////// +// Modify to allow for more or less color ranges +// +#define MAX_RANGES 3 +/////////////////////////////////////////////////////////////////////////////// diff --git a/tests/test_pattern_formatter.cpp b/tests/test_pattern_formatter.cpp index b79ca207..a0a528da 100644 --- a/tests/test_pattern_formatter.cpp +++ b/tests/test_pattern_formatter.cpp @@ -172,6 +172,24 @@ TEST_CASE("color multi-range test2", "[pattern_formatter]") REQUIRE(msg.color_ranges_end[1] == 9); } +// Test case where users supplies more ranges then are allowed. MAX_RANGES is defined as 3 by default. +TEST_CASE("color multi-range test3", "[pattern_formatter]") +{ + auto formatter = std::make_shared("%^***%$***%^***%$***%^***%$***%^***%$"); + std::string logger_name = "test"; + spdlog::details::log_msg msg(logger_name, spdlog::level::info, "ignored"); + memory_buf_t formatted; + formatter->format(msg, formatted); + REQUIRE(msg.num_start_ranges == 3); + REQUIRE(msg.num_end_ranges == 3); + REQUIRE(msg.color_ranges_start[0] == 0); + REQUIRE(msg.color_ranges_start[1] == 6); + REQUIRE(msg.color_ranges_start[2] == 12); + REQUIRE(msg.color_ranges_end[0] == 3); + REQUIRE(msg.color_ranges_end[1] == 9); + REQUIRE(msg.color_ranges_end[2] == 15); +} + // // Test padding //