From d5add9fca56899aa9f98125be076cbd0fb5819ae Mon Sep 17 00:00:00 2001 From: Wouter van Oortmerssen Date: Mon, 14 Feb 2022 11:28:31 -0800 Subject: [PATCH] Fixed FlexBuffers ToString unquoted non-ident keys Change-Id: I0a17ee292c9eebbb1e9b2530c07d37d63b4dda24 --- include/flatbuffers/flexbuffers.h | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/include/flatbuffers/flexbuffers.h b/include/flatbuffers/flexbuffers.h index a8d58d8b8..b4b0332b6 100644 --- a/include/flatbuffers/flexbuffers.h +++ b/include/flatbuffers/flexbuffers.h @@ -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 += ", ";