forked from lix-project/lix
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: lix-project/lix#562
Change-Id: I0c93bd2b8c2f82df208d4693b7254544e3121dc3
This commit is contained in:
parent
d1d96cc4c8
commit
a378c61948
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue