diff --git a/include/fmt/printf.h b/include/fmt/printf.h index 18f8d121..6c7e328f 100644 --- a/include/fmt/printf.h +++ b/include/fmt/printf.h @@ -469,6 +469,8 @@ OutputIt basic_printf_context::format() { // Parse argument index, flags and width. unsigned arg_index = parse_header(it, end, specs); + if (arg_index == 0) + on_error("argument index 0 is out of range"); // Parse precision. if (it != end && *it == '.') { diff --git a/test/printf-test.cc b/test/printf-test.cc index d8fbc964..f158a627 100644 --- a/test/printf-test.cc +++ b/test/printf-test.cc @@ -112,7 +112,7 @@ TEST(PrintfTest, SwitchArgIndexing) { TEST(PrintfTest, InvalidArgIndex) { EXPECT_THROW_MSG(test_sprintf("%0$d", 42), format_error, - "argument index out of range"); + "argument index 0 is out of range"); EXPECT_THROW_MSG(test_sprintf("%2$d", 42), format_error, "argument index out of range"); EXPECT_THROW_MSG(test_sprintf(format("%{}$d", INT_MAX), 42), format_error,