[libc++] `std::format` reads past the 0 terminator in `char[N]` arrays
Closed this issue · 1 comments
If one passes a fixed size char - array containing a 0-terminated string to std::format, the entire array minus one character is added to the result, instead of just the part until the null terminator. This not only seemingly violates [format.formatter.spec]/2.2, but also doesn't match the behavior of MS-STL or libstdc++. (And only formatting 49 characters out of a 50 character array seems buggy anyway.)
The issue is reproducible with all versions of libc++ that shipped with clang since <format> was added, including current trunk on godbolt.
See here:
llvm-project/libcxx/include/__format/format_arg_store.h
Lines 104 to 116 in 37143fe
Per [format.arg]/6, char arrays should be converted to char pointers first.
CC @mordante