Skip to content

Commit

Permalink
fix(dom): add log for deserializer crash
Browse files Browse the repository at this point in the history
  • Loading branch information
ilikethese authored and hippy-actions[bot] committed Jan 22, 2024
1 parent b3f3de0 commit 37f8721
Show file tree
Hide file tree
Showing 3 changed files with 26 additions and 8 deletions.
4 changes: 3 additions & 1 deletion modules/footstone/include/footstone/deserializer.h
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,9 @@ class Deserializer {
Deserializer(const Deserializer&) = delete;
Deserializer& operator=(const Deserializer&) = delete;

void ReadHeader();
bool ReadHeader();

void ReadHeaderChecked();

bool ReadValue(HippyValue& value);

Expand Down
12 changes: 11 additions & 1 deletion modules/footstone/src/deserializer.cc
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,17 @@ bool Deserializer::ReadValue(HippyValue& value) {
return ret;
}

void Deserializer::ReadHeader() {
bool Deserializer::ReadHeader() {
if (position_ < end_ && *position_ == static_cast<uint8_t>(SerializationTag::kVersion)) {
SerializationTag tag;
ReadTag(tag);
version_ = ReadVarint<uint32_t>();
if (version_ <= kSupportedVersion) return true;
}
return false;
}

void Deserializer::ReadHeaderChecked() {
if (position_ < end_ && *position_ == static_cast<uint8_t>(SerializationTag::kVersion)) {
SerializationTag tag;
ReadTag(tag);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -265,9 +265,12 @@ void DoCallBack(JNIEnv *j_env, jobject j_object,
if (j_buffer != nullptr && j_length > 0) {
jbyte params_buffer[j_length];
j_env->GetByteArrayRegion(j_buffer, j_offset, j_length, params_buffer);
footstone::value::Deserializer deserializer((const uint8_t*) params_buffer,
footstone::check::checked_numeric_cast<jlong, size_t>(j_length));
deserializer.ReadHeader();
footstone::value::Deserializer deserializer((const uint8_t*)params_buffer,
footstone::check::checked_numeric_cast<jlong, size_t>(j_length));
ret = deserializer.ReadHeader();
FOOTSTONE_CHECK(ret) << "Deserializer read header failed. function name " << func_name << ", root id " << root_id
<< ", node id " << node_id << "callback id " << cb_id << ", offset " << j_offset << ", length "
<< j_length;
deserializer.ReadValue(*params);
}

Expand Down Expand Up @@ -334,9 +337,12 @@ void OnReceivedEvent(JNIEnv* j_env, jobject j_object, jint j_render_manager_id,
jbyte params_buffer[j_length];
j_env->GetByteArrayRegion(j_buffer, j_offset, j_length, params_buffer);
params = std::make_shared<HippyValue>();
footstone::value::Deserializer deserializer((const uint8_t*) params_buffer,
footstone::check::checked_numeric_cast<jlong, size_t>(j_length));
deserializer.ReadHeader();
footstone::value::Deserializer deserializer((const uint8_t*)params_buffer,
footstone::check::checked_numeric_cast<jlong, size_t>(j_length));
ret = deserializer.ReadHeader();
FOOTSTONE_CHECK(ret) << "Deserializer read header failed. event name " << event_name << ", root id " << root_id
<< ", node id " << dom_id << ", offset " << j_offset << ", length "
<< j_length;
deserializer.ReadValue(*params);
}

Expand Down

0 comments on commit 37f8721

Please sign in to comment.