in glean/rts/json.cpp [146:190]
void escape(
const EscapeTable& escapes,
const uint8_t *text,
size_t text_size,
char *out,
size_t escaped_size) noexcept {
assert(escaped_size >= text_size);
if (escaped_size == text_size) {
if (text_size != 0) {
memcpy(out, text, text_size);
}
} else {
size_t o = 0;
for (size_t i = 0; i < text_size; ++i) {
const auto c = text[i];
switch (escapes[c]) {
case K:
out[o++] = c;
break;
case Z:
// \0 is represented as \0 \1 in the mangled representation
assert(i < text_size);
++i;
FOLLY_FALLTHROUGH;
case X:
out[o++] = '\\';
out[o++] = 'u';
out[o++] = '0';
out[o++] = '0';
out[o++] = hex(c >> 4);
out[o++] = hex(c & 0x0F);
break;
default:
out[o++] = '\\';
out[o++] = escapes[c];
break;
}
assert (o <= escaped_size);
}
assert(o == escaped_size);
}
}