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

Unified Diff: mojo/apps/js/test/js_to_cpp_unittest.cc

Issue 267343006: Pass data down pipes in mojo fuzzing tests. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Rebase on clean branch. Created 6 years, 7 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
« no previous file with comments | « no previous file | mojo/apps/js/test/js_to_cpp_unittest.js » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: mojo/apps/js/test/js_to_cpp_unittest.cc
diff --git a/mojo/apps/js/test/js_to_cpp_unittest.cc b/mojo/apps/js/test/js_to_cpp_unittest.cc
index 89e3d2e106418d7a7f9d66decfdd489af9ff5c35..90a927554f95c2dd3e5bb9ca1958c3bb5c5214a4 100644
--- a/mojo/apps/js/test/js_to_cpp_unittest.cc
+++ b/mojo/apps/js/test/js_to_cpp_unittest.cc
@@ -20,6 +20,11 @@
namespace mojo {
namespace js {
+
+// Global value updated by some checks to prevent compilers from optimizing
+// reads out of existence.
+uint32 g_waste_accumulator = 0;
+
namespace {
// Negative numbers with different values in each byte, the last of
@@ -108,6 +113,30 @@ void CheckSampleEchoArgs(const js_to_cpp::EchoArgs& arg) {
EXPECT_EQ(std::string("three"), arg.string_array()[2].To<std::string>());
}
+void CheckDataPipe(MojoHandle data_pipe_handle) {
+ char buffer[100];
+ uint32_t buffer_size = static_cast<uint32_t>(sizeof(buffer));
+ MojoResult result = MojoReadData(
+ data_pipe_handle, buffer, &buffer_size, MOJO_READ_DATA_FLAG_NONE);
+ EXPECT_EQ(MOJO_RESULT_OK, result);
+ EXPECT_EQ(64u, buffer_size);
+ for (int i = 0; i < 64; ++i) {
+ EXPECT_EQ(i, buffer[i]);
+ }
+}
+
+void CheckCorruptedString(const mojo::String& arg) {
+ // The values don't matter so long as all accesses are within bounds.
+ std::string name = arg.To<std::string>();
+ for (size_t i = 0; i < name.length(); ++i)
+ g_waste_accumulator += name[i];
+}
+
+void CheckCorruptedStringArray(const mojo::Array<mojo::String>& string_array) {
+ for (size_t i = 0; i < string_array.size(); ++i)
+ CheckCorruptedString(string_array[i]);
+}
+
// Base Provider implementation class. It's expected that tests subclass and
// override the appropriate Provider functions. When test is done quit the
// run_loop().
@@ -203,6 +232,7 @@ class EchoCppSideConnection : public CppSideConnection {
EXPECT_EQ(-1, arg2.si16());
EXPECT_EQ(-1, arg2.si8());
EXPECT_EQ(std::string("going"), arg2.name().To<std::string>());
+ CheckDataPipe(arg2.data_handle().get().value());
}
virtual void TestFinished() OVERRIDE {
@@ -233,8 +263,13 @@ class BitFlipCppSideConnection : public CppSideConnection {
js_side_->BitFlip(BuildSampleEchoArgs());
}
- virtual void BitFlipResponse(const js_to_cpp::EchoArgs& arg1) OVERRIDE {
- // TODO(tsepez): How to check, may be corrupt in various ways.
+ virtual void BitFlipResponse(const js_to_cpp::EchoArgs& arg) OVERRIDE {
+ if (arg.is_null())
+ return;
+ CheckCorruptedString(arg.name());
+ CheckCorruptedStringArray(arg.string_array());
+ if (arg.data_handle().is_valid())
+ CheckDataPipe(arg.data_handle().get().value());
}
virtual void TestFinished() OVERRIDE {
« no previous file with comments | « no previous file | mojo/apps/js/test/js_to_cpp_unittest.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698