| 626 | } |
| 627 | |
| 628 | bool VerifyObject(flatbuffers::Verifier &v, const reflection::Schema &schema, |
| 629 | const reflection::Object &obj, |
| 630 | const flatbuffers::Table *table, bool required) { |
| 631 | if (!table) return !required; |
| 632 | if (!table->VerifyTableStart(v)) return false; |
| 633 | for (uoffset_t i = 0; i < obj.fields()->size(); i++) { |
| 634 | auto field_def = obj.fields()->Get(i); |
| 635 | switch (field_def->type()->base_type()) { |
| 636 | case reflection::None: FLATBUFFERS_ASSERT(false); break; |
| 637 | case reflection::UType: |
| 638 | if (!table->VerifyField<uint8_t>(v, field_def->offset())) return false; |
| 639 | break; |
| 640 | case reflection::Bool: |
| 641 | case reflection::Byte: |
| 642 | case reflection::UByte: |
| 643 | if (!table->VerifyField<int8_t>(v, field_def->offset())) return false; |
| 644 | break; |
| 645 | case reflection::Short: |
| 646 | case reflection::UShort: |
| 647 | if (!table->VerifyField<int16_t>(v, field_def->offset())) return false; |
| 648 | break; |
| 649 | case reflection::Int: |
| 650 | case reflection::UInt: |
| 651 | if (!table->VerifyField<int32_t>(v, field_def->offset())) return false; |
| 652 | break; |
| 653 | case reflection::Long: |
| 654 | case reflection::ULong: |
| 655 | if (!table->VerifyField<int64_t>(v, field_def->offset())) return false; |
| 656 | break; |
| 657 | case reflection::Float: |
| 658 | if (!table->VerifyField<float>(v, field_def->offset())) return false; |
| 659 | break; |
| 660 | case reflection::Double: |
| 661 | if (!table->VerifyField<double>(v, field_def->offset())) return false; |
| 662 | break; |
| 663 | case reflection::String: |
| 664 | if (!table->VerifyField<uoffset_t>(v, field_def->offset()) || |
| 665 | !v.VerifyString(flatbuffers::GetFieldS(*table, *field_def))) { |
| 666 | return false; |
| 667 | } |
| 668 | break; |
| 669 | case reflection::Vector: |
| 670 | if (!VerifyVector(v, schema, *table, *field_def)) return false; |
| 671 | break; |
| 672 | case reflection::Obj: { |
| 673 | auto child_obj = schema.objects()->Get(field_def->type()->index()); |
| 674 | if (child_obj->is_struct()) { |
| 675 | if (!VerifyStruct(v, *table, field_def->offset(), *child_obj, |
| 676 | field_def->required())) { |
| 677 | return false; |
| 678 | } |
| 679 | } else { |
| 680 | if (!VerifyObject(v, schema, *child_obj, |
| 681 | flatbuffers::GetFieldT(*table, *field_def), |
| 682 | field_def->required())) { |
| 683 | return false; |
| 684 | } |
| 685 | } |
no test coverage detected