diff --git a/include/flatbuffers/reflection.h b/include/flatbuffers/reflection.h index 1530a2ca0dc..c901c7af98c 100644 --- a/include/flatbuffers/reflection.h +++ b/include/flatbuffers/reflection.h @@ -354,18 +354,22 @@ class ResizeContext { break; } case reflection::Vector: { - if (fielddef.type()->element() != reflection::Obj) break; + auto elem_type = fielddef.type()->element(); + if (elem_type != reflection::Obj && elem_type != reflection::String) + break; auto vec = reinterpret_cast *>(ref); - auto elemobjectdef = - schema_.objects()->Get(fielddef.type()->index()); - if (elemobjectdef->is_struct()) break; + auto elemobjectdef = elem_type == reflection::Obj + ? schema_.objects()->Get(fielddef.type()->index()) + : nullptr; + if (elemobjectdef && elemobjectdef->is_struct()) break; for (uoffset_t i = 0; i < vec->size(); i++) { auto loc = vec->Data() + i * sizeof(uoffset_t); if (DagCheck(loc)) continue; // This offset already visited. auto dest = loc + vec->Get(i); Straddle(loc, dest ,loc); - ResizeTable(*elemobjectdef, reinterpret_cast(dest)); + if (elemobjectdef) + ResizeTable(*elemobjectdef, reinterpret_cast
(dest)); } break; }