libutil: fix non-ASCII chars in URL encoding

Due to the cast to (unsigned int), the encoding appended broken
bytes padding. This is fixed here with a bitmask.

Fixes: https://git.lix.systems/lix-project/lix/issues/562
Change-Id: I0c93bd2b8c2f82df208d4693b7254544e3121dc3
This commit is contained in:
Emilia Bopp
2024-11-11 14:26:03 +01:00
parent d1d96cc4c8
commit a378c61948
2 changed files with 7 additions and 2 deletions
+1 -1
View File
@@ -104,7 +104,7 @@ std::string percentEncode(std::string_view s, std::string_view keep)
|| keep.find(c) != std::string::npos)
res += c;
else
res += fmt("%%%02X", (unsigned int) c);
res += fmt("%%%02X", 0xff & (unsigned int) c);
return res;
}
+6 -1
View File
@@ -303,7 +303,6 @@ namespace nix {
ASSERT_EQ(d, s);
}
/* ----------------------------------------------------------------------------
* percentEncode
* --------------------------------------------------------------------------*/
@@ -336,4 +335,10 @@ namespace nix {
ASSERT_EQ(d, s);
}
TEST(percentEncode, utf8Input) {
std::string s = percentEncode("ä");
std::string d = "%C3%A4";
ASSERT_EQ(d, s);
}
}