diff --git a/include/flatbuffers/idl.h b/include/flatbuffers/idl.h index 8c9b0a216..208ac52c9 100644 --- a/include/flatbuffers/idl.h +++ b/include/flatbuffers/idl.h @@ -593,6 +593,8 @@ struct IDLOptions { bool no_warnings; std::string project_root; bool cs_global_alias; + bool json_nested_flatbuffers; + bool json_nested_flexbuffers; // Possible options for the more general generator below. enum Language { @@ -680,6 +682,8 @@ struct IDLOptions { no_warnings(false), project_root(""), cs_global_alias(false), + json_nested_flatbuffers(true), + json_nested_flexbuffers(true), mini_reflect(IDLOptions::kNone), require_explicit_ids(false), lang_to_generate(0), diff --git a/src/idl_gen_text.cpp b/src/idl_gen_text.cpp index 903c41ecd..f32243c83 100644 --- a/src/idl_gen_text.cpp +++ b/src/idl_gen_text.cpp @@ -264,12 +264,12 @@ struct JsonPrinter { FLATBUFFERS_ASSERT(IsStruct(fd.value.type) || IsArray(fd.value.type)); val = reinterpret_cast(table)->GetStruct( fd.value.offset); - } else if (fd.flexbuffer) { + } else if (fd.flexbuffer && opts.json_nested_flexbuffers) { auto vec = table->GetPointer *>(fd.value.offset); auto root = flexbuffers::GetRoot(vec->data(), vec->size()); root.ToString(true, opts.strict_json, text); return true; - } else if (fd.nested_flatbuffer) { + } else if (fd.nested_flatbuffer && opts.json_nested_flatbuffers) { auto vec = table->GetPointer *>(fd.value.offset); auto root = GetRoot(vec->data()); return GenStruct(*fd.nested_flatbuffer, root, indent); diff --git a/tests/fuzzer/flatbuffers_monster_fuzzer.cc b/tests/fuzzer/flatbuffers_monster_fuzzer.cc index 8981c2f10..727db0c4a 100644 --- a/tests/fuzzer/flatbuffers_monster_fuzzer.cc +++ b/tests/fuzzer/flatbuffers_monster_fuzzer.cc @@ -80,6 +80,10 @@ std::string do_test(const flatbuffers::IDLOptions &opts, flatbuffers::Verifier verifier(parser.builder_.GetBufferPointer(), parser.builder_.GetSize()); TEST_EQ(true, MyGame::Example::VerifyMonsterBuffer(verifier)); + // FIXME: these are currently not being properly verified, so turn them off + // for fuzzing until they are. + parser.opts.json_nested_flatbuffers = false; + parser.opts.json_nested_flexbuffers = false; TEST_ASSERT( GenerateText(parser, parser.builder_.GetBufferPointer(), &jsongen)); } else if (check_parser) {