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: #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)
|
|| keep.find(c) != std::string::npos)
|
||||||
res += c;
|
res += c;
|
||||||
else
|
else
|
||||||
res += fmt("%%%02X", (unsigned int) c);
|
res += fmt("%%%02X", 0xff & (unsigned int) c);
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -303,7 +303,6 @@ namespace nix {
|
||||||
ASSERT_EQ(d, s);
|
ASSERT_EQ(d, s);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/* ----------------------------------------------------------------------------
|
/* ----------------------------------------------------------------------------
|
||||||
* percentEncode
|
* percentEncode
|
||||||
* --------------------------------------------------------------------------*/
|
* --------------------------------------------------------------------------*/
|
||||||
|
@ -336,4 +335,10 @@ namespace nix {
|
||||||
ASSERT_EQ(d, s);
|
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