Fixed FlexBuffers ToString unquoted non-ident keys

Change-Id: I0a17ee292c9eebbb1e9b2530c07d37d63b4dda24
This commit is contained in:
Wouter van Oortmerssen
2022-02-14 11:28:31 -08:00
parent 15df50eb7f
commit d5add9fca5

View File

@@ -572,7 +572,23 @@ class Reference {
auto keys = m.Keys();
auto vals = m.Values();
for (size_t i = 0; i < keys.size(); i++) {
keys[i].ToString(true, keys_quoted, s);
bool kq = keys_quoted;
if (!kq) {
// FlexBuffers keys may contain arbitrary characters, only allow
// unquoted if it looks like an "identifier":
const char *p = keys[i].AsKey();
if (!flatbuffers::is_alpha(*p) && *p != '_') {
kq = true;
} else {
while (*++p) {
if (!flatbuffers::is_alnum(*p) && *p != '_') {
kq = true;
break;
}
}
}
}
keys[i].ToString(true, kq, s);
s += ": ";
vals[i].ToString(true, keys_quoted, s);
if (i < keys.size() - 1) s += ", ";