MCPcopy Create free account
hub / github.com/COVESA/vsomeip / deserialize

Method deserialize

implementation/security/src/policy.cpp:61–149  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

59}
60
61bool policy::deserialize(const byte_t*& _data, uint32_t& _size) {
62
63 bool its_result;
64 uid_t its_uid;
65 gid_t its_gid;
66
67 std::scoped_lock its_lock(mutex_);
68
69 its_result = deserialize_uid_gid(_data, _size, its_uid, its_gid);
70 if (its_result == false)
71 return false;
72
73 // Fill policy uid/gid
74 const auto its_uid_interval = boost::icl::interval<uid_t>::closed(its_uid, its_uid);
75 boost::icl::interval_set<gid_t> its_gid_set;
76 its_gid_set.insert(its_gid);
77 credentials_ += std::make_pair(its_uid_interval, its_gid_set);
78
79 // Deserialized policies are always "Allow" - policies
80 allow_who_ = true;
81 allow_what_ = true;
82
83 // Deserialize requests array length
84 uint32_t its_requests_length;
85 its_result = deserialize_u32(_data, _size, its_requests_length);
86 if (its_result == false)
87 return false;
88
89 // Deserialize requests
90 while (0 < its_requests_length) {
91
92 uint32_t its_current_size(_size);
93
94 uint16_t its_service;
95 its_result = deserialize_u16(_data, _size, its_service);
96 if (its_result == false)
97 return false;
98
99 if (its_service == 0x0000 || its_service == 0xffff) {
100 VSOMEIP_WARNING << "vSomeIP Security: Policy with service ID: 0x" << hex4(its_service) << " is not allowed!";
101 return false;
102 }
103
104 const auto its_service_interval = boost::icl::interval<service_t>::closed(its_service, its_service);
105
106 boost::icl::interval_map<instance_t, boost::icl::interval_set<method_t>> its_ids;
107 its_result = deserialize_ids(_data, _size, its_ids);
108 if (its_result == false)
109 return false;
110
111 requests_ += std::make_pair(its_service_interval, its_ids);
112
113 its_requests_length -= (its_current_size - _size);
114 }
115
116 // Deserialize offers array length
117 uint32_t its_offers_length;
118 its_result = deserialize_u32(_data, _size, its_offers_length);

Callers 15

TESTFunction · 0.45
TESTFunction · 0.45
TESTFunction · 0.45
TESTFunction · 0.45
TESTFunction · 0.45
TESTFunction · 0.45
TESTFunction · 0.45
TEST_PFunction · 0.45
parseFunction · 0.45
wait_for_offer_serviceFunction · 0.45
TEST_FFunction · 0.45
TESTFunction · 0.45

Calls 2

hex4Function · 0.85
insertMethod · 0.80

Tested by 5

TEST_PFunction · 0.36
wait_for_offer_serviceFunction · 0.36
TEST_FFunction · 0.36
TESTFunction · 0.36
TEST_FFunction · 0.36