Skip to content

Commit

Permalink
VerifySizePrefixed (reflection::Schema) and GetAnySizePrefixedRoot ad…
Browse files Browse the repository at this point in the history
…ded (#7181)

* Typo in flatc options (warning-as-errors instead of warnings-as-errors)

* VerifySizePrefixed (reflection::Schema) and GetAnySizePrefixedRoot added

* some review comments

* more review comments
  • Loading branch information
stefan301 committed Mar 24, 2022
1 parent 5a13f62 commit 4213d91
Show file tree
Hide file tree
Showing 2 changed files with 29 additions and 5 deletions.
18 changes: 16 additions & 2 deletions include/flatbuffers/reflection.h
Expand Up @@ -88,13 +88,22 @@ inline size_t GetTypeSizeInline(reflection::BaseType base_type, int type_index,
}

// Get the root, regardless of what type it is.
inline Table *GetAnyRoot(uint8_t *flatbuf) {
inline Table *GetAnyRoot(uint8_t *const flatbuf) {
return GetMutableRoot<Table>(flatbuf);
}
inline const Table *GetAnyRoot(const uint8_t *flatbuf) {

inline const Table *GetAnyRoot(const uint8_t *const flatbuf) {
return GetRoot<Table>(flatbuf);
}

inline Table *GetAnySizePrefixedRoot(uint8_t *const flatbuf) {
return GetMutableSizePrefixedRoot<Table>(flatbuf);
}

inline const Table *GetAnySizePrefixedRoot(const uint8_t *const flatbuf) {
return GetSizePrefixedRoot<Table>(flatbuf);
}

// Get a field's default, if you know it's an integer, and its exact type.
template<typename T> T GetFieldDefaultI(const reflection::Field &field) {
FLATBUFFERS_ASSERT(sizeof(T) == GetTypeSize(field.type()->base_type()));
Expand Down Expand Up @@ -503,6 +512,11 @@ bool Verify(const reflection::Schema &schema, const reflection::Object &root,
const uint8_t *buf, size_t length, uoffset_t max_depth = 64,
uoffset_t max_tables = 1000000);

bool VerifySizePrefixed(const reflection::Schema &schema,
const reflection::Object &root, const uint8_t *buf,
size_t length, uoffset_t max_depth = 64,
uoffset_t max_tables = 1000000);

} // namespace flatbuffers

#endif // FLATBUFFERS_REFLECTION_H_
16 changes: 13 additions & 3 deletions src/reflection.cpp
Expand Up @@ -736,10 +736,20 @@ bool VerifyObject(flatbuffers::Verifier &v, const reflection::Schema &schema,
}

bool Verify(const reflection::Schema &schema, const reflection::Object &root,
const uint8_t *buf, size_t length, uoffset_t max_depth /*= 64*/,
uoffset_t max_tables /*= 1000000*/) {
const uint8_t *const buf, const size_t length,
const uoffset_t max_depth, const uoffset_t max_tables) {
Verifier v(buf, length, max_depth, max_tables);
return VerifyObject(v, schema, root, flatbuffers::GetAnyRoot(buf), true);
return VerifyObject(v, schema, root, flatbuffers::GetAnyRoot(buf),
/*required=*/true);
}

bool VerifySizePrefixed(const reflection::Schema &schema,
const reflection::Object &root,
const uint8_t *const buf, const size_t length,
const uoffset_t max_depth, const uoffset_t max_tables) {
Verifier v(buf, length, max_depth, max_tables);
return VerifyObject(v, schema, root, flatbuffers::GetAnySizePrefixedRoot(buf),
/*required=*/true);
}

} // namespace flatbuffers

0 comments on commit 4213d91

Please sign in to comment.