Check chrono spec starts with %

This commit is contained in:
Shawn Zhong 2022-12-17 03:52:20 -06:00 committed by Victor Zverovich
parent 115001a3b1
commit 8c56919bd2
2 changed files with 6 additions and 0 deletions

View File

@ -626,6 +626,8 @@ template <typename Char, typename Handler>
FMT_CONSTEXPR const Char* parse_chrono_format(const Char* begin,
const Char* end,
Handler&& handler) {
if (begin == end || *begin == '}') return begin;
if (*begin != '%') FMT_THROW(format_error("invalid format"));
auto ptr = begin;
while (ptr != end) {
auto c = *ptr;

View File

@ -507,6 +507,10 @@ TEST(chrono_test, invalid_specs) {
"invalid format");
EXPECT_THROW_MSG((void)fmt::format(runtime("{:%Oq}"), sec), fmt::format_error,
"invalid format");
EXPECT_THROW_MSG((void)fmt::format(runtime("{:abc}"), sec), fmt::format_error,
"invalid format");
EXPECT_THROW_MSG((void)fmt::format(runtime("{:.2f}"), sec), fmt::format_error,
"invalid format");
}
auto format_tm(const std::tm& time, fmt::string_view spec,