| 549 | } |
| 550 | |
| 551 | bool VerifyVector(flatbuffers::Verifier &v, const reflection::Schema &schema, |
| 552 | const flatbuffers::Table &table, |
| 553 | const reflection::Field &vec_field) { |
| 554 | FLATBUFFERS_ASSERT(vec_field.type()->base_type() == reflection::Vector); |
| 555 | if (!table.VerifyField<uoffset_t>(v, vec_field.offset())) return false; |
| 556 | |
| 557 | switch (vec_field.type()->element()) { |
| 558 | case reflection::UType: |
| 559 | return v.VerifyVector(flatbuffers::GetFieldV<uint8_t>(table, vec_field)); |
| 560 | case reflection::Bool: |
| 561 | case reflection::Byte: |
| 562 | case reflection::UByte: |
| 563 | return v.VerifyVector(flatbuffers::GetFieldV<int8_t>(table, vec_field)); |
| 564 | case reflection::Short: |
| 565 | case reflection::UShort: |
| 566 | return v.VerifyVector(flatbuffers::GetFieldV<int16_t>(table, vec_field)); |
| 567 | case reflection::Int: |
| 568 | case reflection::UInt: |
| 569 | return v.VerifyVector(flatbuffers::GetFieldV<int32_t>(table, vec_field)); |
| 570 | case reflection::Long: |
| 571 | case reflection::ULong: |
| 572 | return v.VerifyVector(flatbuffers::GetFieldV<int64_t>(table, vec_field)); |
| 573 | case reflection::Float: |
| 574 | return v.VerifyVector(flatbuffers::GetFieldV<float>(table, vec_field)); |
| 575 | case reflection::Double: |
| 576 | return v.VerifyVector(flatbuffers::GetFieldV<double>(table, vec_field)); |
| 577 | case reflection::String: { |
| 578 | auto vec_string = |
| 579 | flatbuffers::GetFieldV<flatbuffers::Offset<flatbuffers::String>>( |
| 580 | table, vec_field); |
| 581 | if (v.VerifyVector(vec_string) && v.VerifyVectorOfStrings(vec_string)) { |
| 582 | return true; |
| 583 | } else { |
| 584 | return false; |
| 585 | } |
| 586 | } |
| 587 | case reflection::Obj: { |
| 588 | auto obj = schema.objects()->Get(vec_field.type()->index()); |
| 589 | if (obj->is_struct()) { |
| 590 | return VerifyVectorOfStructs(v, table, vec_field.offset(), *obj, |
| 591 | vec_field.required()); |
| 592 | } else { |
| 593 | auto vec = |
| 594 | flatbuffers::GetFieldV<flatbuffers::Offset<flatbuffers::Table>>( |
| 595 | table, vec_field); |
| 596 | if (!v.VerifyVector(vec)) return false; |
| 597 | if (!vec) return true; |
| 598 | for (uoffset_t j = 0; j < vec->size(); j++) { |
| 599 | if (!VerifyObject(v, schema, *obj, vec->Get(j), true)) { |
| 600 | return false; |
| 601 | } |
| 602 | } |
| 603 | return true; |
| 604 | } |
| 605 | } |
| 606 | case reflection::Union: { |
| 607 | auto vec = flatbuffers::GetFieldV<flatbuffers::Offset<uint8_t>>( |
| 608 | table, vec_field); |
no test coverage detected