shouldQuote = true;
}
string tmp = txtEscape(v);
- boost::replace_all(tmp, ",", "\\\\,");
- escaped.push_back(tmp);
+ string unescaped;
+ unescaped.reserve(tmp.size() + 4);
+ for (auto const &ch : tmp) {
+ if (ch == '\\') {
+ unescaped += R"F(\\)F";
+ continue;
+ }
+ if (ch == ',') {
+ unescaped += R"F(\\,)F";
+ continue;
+ }
+ unescaped += ch;
+ }
+ escaped.push_back(unescaped);
}
if (shouldQuote) {
d_string.append(1, '"');
(CASE_L(QType::SVCB, "16 foo.powerdns.org. alpn=h2,h3 mandatory=alpn ipv4hint=\"192.0.2.1\"", "16 foo.powerdns.org. mandatory=alpn alpn=h2,h3 ipv4hint=192.0.2.1", "\0\x10\3foo\x08powerdns\x03org\x00\x00\x00\x00\x02\x00\x01\x00\x01\x00\x06\x02h2\x02h3\x00\x04\x00\x04\xc0\x00\x02\x01"))
// Escaped ALPN value
(CASE_S(QType::SVCB, R"FOO(1 foo.powerdns.org. alpn=h3\\,cool,h2)FOO", "\0\x01\3foo\x08powerdns\x03org\x00\x00\x01\x00\x0b\x07h3,cool\x02h2"))
+ (CASE_S(QType::SVCB, R"FOO(1 foo.powerdns.org. alpn=h\\\\3\\,cool,h2)FOO", "\0\x01\3foo\x08powerdns\x03org\x00\x00\x01\x00\x0c\x08h\\3,cool\x02h2"))
// Escaped _and_ spaced ALPN value
(CASE_S(QType::SVCB, R"FOO(1 foo.powerdns.org. alpn="h3\\,co ol,h2")FOO", "\0\x01\3foo\x08powerdns\x03org\x00\x00\x01\x00\x0c\x08h3,co ol\x02h2"))