Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(780)

Unified Diff: mojo/public/cpp/bindings/tests/serialization_api_unittest.cc

Issue 1800753005: C++ bindings: A struct's Deserialize() now does validation before deserializing. (Closed) Base URL: https://github.com/domokit/mojo.git@master
Patch Set: Created 4 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: mojo/public/cpp/bindings/tests/serialization_api_unittest.cc
diff --git a/mojo/public/cpp/bindings/tests/serialization_api_unittest.cc b/mojo/public/cpp/bindings/tests/serialization_api_unittest.cc
index 28ada48a0609dc46c2422c27d222d6870e346c70..addc4adf9ecd6a2df660d0eff17894c7ebe0a420 100644
--- a/mojo/public/cpp/bindings/tests/serialization_api_unittest.cc
+++ b/mojo/public/cpp/bindings/tests/serialization_api_unittest.cc
@@ -37,11 +37,13 @@ class StructSerializationAPITest : public testing::Test {
Type::Data_::Validate(bytes.data(), &bounds_checker, nullptr);
EXPECT_EQ(expected_validation_error, actual_validation_error);
+ Type out_val;
+ auto deserialize_ret = out_val.Deserialize(bytes.data(), bytes.size());
if (actual_validation_error == mojo::internal::ValidationError::NONE) {
- Type out_val;
- out_val.Deserialize(bytes.data());
EXPECT_TRUE(val->Equals(out_val));
}
+ EXPECT_EQ(actual_validation_error == mojo::internal::ValidationError::NONE,
+ deserialize_ret);
}
private:
@@ -142,6 +144,24 @@ TEST_F(StructSerializationAPITest, NullableHandleSerialization) {
mojo::internal::ValidationError::NONE);
}
+TEST_F(StructSerializationAPITest, DeserializationFailure) {
+ void* buf[100];
+ EmptyStruct es;
+
+ // Bounds checker should fail this, since buf_size is too small.
+ EXPECT_FALSE(es.Deserialize(buf, 1));
+
+ es.Serialize(buf, sizeof(buf));
+ EXPECT_TRUE(es.Deserialize(buf, sizeof(buf)));
+
+ // Invalid struct header: this should happen inside
+ // EmptyStruct::Data_::Validate()).
+ es.Serialize(buf, sizeof(buf));
+ EmptyStruct::Data_* es_data = reinterpret_cast<EmptyStruct::Data_*>(buf);
+ es_data->header_.num_bytes = 0;
+ EXPECT_FALSE(es.Deserialize(buf, sizeof(buf)));
+}
+
} // namespace
} // namespace test
} // namespace mojo

Powered by Google App Engine
This is Rietveld 408576698