Avoid invalid read on invalid Void msg
This commit is contained in:
parent
cdbe3117d7
commit
24bbf5a8f0
|
@ -922,28 +922,30 @@ struct LoadSaveHelper : Context {
|
|||
static constexpr bool isSerializing = false;
|
||||
static constexpr bool is_fb_visitor = true;
|
||||
|
||||
const uint16_t* vtable;
|
||||
const uint8_t* current;
|
||||
|
||||
SerializeFun(const uint16_t* vtable, const uint8_t* current, Context& context)
|
||||
: Context(context), vtable(vtable), current(current) {}
|
||||
SerializeFun(const uint8_t* current, Context& context) : Context(context), current(current) {}
|
||||
|
||||
template <class... Args>
|
||||
void operator()(Args&... members) {
|
||||
if (sizeof...(Args) == 0) {
|
||||
return;
|
||||
}
|
||||
uint32_t current_offset = interpret_as<uint32_t>(current);
|
||||
current += current_offset;
|
||||
int32_t vtable_offset = interpret_as<int32_t>(current);
|
||||
const uint16_t* vtable = reinterpret_cast<const uint16_t*>(current - vtable_offset);
|
||||
int i = 0;
|
||||
uint16_t vtable_length = vtable[i++] / sizeof(uint16_t);
|
||||
uint16_t table_length = vtable[i++];
|
||||
for_each(LoadMember<Context>{ vtable, current, vtable_length, table_length, i, this->context() }, members...);
|
||||
for_each(LoadMember<Context>{ vtable, current, vtable_length, table_length, i, this->context() },
|
||||
members...);
|
||||
}
|
||||
};
|
||||
|
||||
template <class Member>
|
||||
std::enable_if_t<expect_serialize_member<Member>> load(Member& member, const uint8_t* current) {
|
||||
uint32_t current_offset = interpret_as<uint32_t>(current);
|
||||
current += current_offset;
|
||||
int32_t vtable_offset = interpret_as<int32_t>(current);
|
||||
const uint16_t* vtable = reinterpret_cast<const uint16_t*>(current - vtable_offset);
|
||||
SerializeFun fun(vtable, current, this->context());
|
||||
SerializeFun fun(current, this->context());
|
||||
if constexpr (serializable_traits<Member>::value) {
|
||||
serializable_traits<Member>::serialize(fun, member);
|
||||
} else {
|
||||
|
|
Loading…
Reference in New Issue