forked from fmtlib/fmt
Fix formatting of paths containing invalid Unicode
This commit is contained in:
@@ -2027,16 +2027,14 @@ auto write_escaped_cp(OutputIt out, const find_escape_result<Char>& escape)
|
|||||||
*out++ = static_cast<Char>('\\');
|
*out++ = static_cast<Char>('\\');
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
if (is_utf8()) {
|
if (escape.cp < 0x100) {
|
||||||
if (escape.cp < 0x100) {
|
return write_codepoint<2, Char>(out, 'x', escape.cp);
|
||||||
return write_codepoint<2, Char>(out, 'x', escape.cp);
|
}
|
||||||
}
|
if (escape.cp < 0x10000) {
|
||||||
if (escape.cp < 0x10000) {
|
return write_codepoint<4, Char>(out, 'u', escape.cp);
|
||||||
return write_codepoint<4, Char>(out, 'u', escape.cp);
|
}
|
||||||
}
|
if (escape.cp < 0x110000) {
|
||||||
if (escape.cp < 0x110000) {
|
return write_codepoint<8, Char>(out, 'U', escape.cp);
|
||||||
return write_codepoint<8, Char>(out, 'U', escape.cp);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
for (Char escape_char : basic_string_view<Char>(
|
for (Char escape_char : basic_string_view<Char>(
|
||||||
escape.begin, to_unsigned(escape.end - escape.begin))) {
|
escape.begin, to_unsigned(escape.end - escape.begin))) {
|
||||||
|
@@ -30,8 +30,7 @@ TEST(std_test, path) {
|
|||||||
L"\x0428\x0447\x0443\x0447\x044B\x043D\x0448"
|
L"\x0428\x0447\x0443\x0447\x044B\x043D\x0448"
|
||||||
L"\x0447\x044B\x043D\x0430")),
|
L"\x0447\x044B\x043D\x0430")),
|
||||||
"\"Шчучыншчына\"");
|
"\"Шчучыншчына\"");
|
||||||
// EXPECT_EQ(fmt::format("{}", std::filesystem::path(L"\xd800")),
|
EXPECT_EQ(fmt::format("{}", std::filesystem::path(L"\xd800")), "\"\\ud800\"");
|
||||||
// "\\x{d800}");
|
|
||||||
# endif
|
# endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user