@@ -198,15 +198,12 @@ _LIBCPP_HIDE_FROM_ABI basic_format_arg<_Context> __create_format_arg(_Tp& __valu
198198 else if constexpr (__arg == __arg_t ::__string_view)
199199 // Using std::size on a character array will add the NUL-terminator to the size.
200200 if constexpr (__is_bounded_array_of<_Dp, __context_char_type>) {
201- const auto __pbegin = std::begin (__value);
202- if (const __context_char_type* const __pzero =
203- char_traits<__context_char_type>::find (__pbegin, extent_v<_Dp>, __context_char_type{})) {
204- return basic_format_arg<_Context>{
205- __arg, basic_string_view<__context_char_type>{__pbegin, static_cast <size_t >(__pzero - __pbegin)}};
206- } else {
207- // Per [format.arg]/5, the behavior is undefined because the array is not null-terminated.
208- return basic_format_arg<_Context>{__arg, basic_string_view<__context_char_type>{__pbegin, extent_v<_Dp>}};
209- }
201+ const __context_char_type* const __pbegin = std::begin (__value);
202+ const __context_char_type* const __pzero =
203+ char_traits<__context_char_type>::find (__pbegin, extent_v<_Dp>, __context_char_type{});
204+ _LIBCPP_ASSERT_VALID_INPUT_RANGE (__pzero != nullptr , " formatting a non-null-terminated array" );
205+ return basic_format_arg<_Context>{
206+ __arg, basic_string_view<__context_char_type>{__pbegin, static_cast <size_t >(__pzero - __pbegin)}};
210207 } else
211208 // When the _Traits or _Allocator are different an implicit conversion will fail.
212209 return basic_format_arg<_Context>{__arg, basic_string_view<__context_char_type>{__value.data (), __value.size ()}};
0 commit comments