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

Side by Side Diff: ipc/ipc_fuzzing_tests.cc

Issue 2968003005: Support Serializing and Deserializing RepeatedField / RepeatedPtrField in IPC::Message (Closed)
Patch Set: Resolve review comments Created 3 years, 5 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 unified diff | Download patch
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include <stdint.h> 5 #include <stdint.h>
6 #include <stdio.h> 6 #include <stdio.h>
7 7
8 #include <limits> 8 #include <limits>
9 #include <memory> 9 #include <memory>
10 #include <sstream> 10 #include <sstream>
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after
87 EXPECT_TRUE(m.WriteInt(-1)); // This is the count of elements. 87 EXPECT_TRUE(m.WriteInt(-1)); // This is the count of elements.
88 EXPECT_TRUE(m.WriteInt(1)); 88 EXPECT_TRUE(m.WriteInt(1));
89 EXPECT_TRUE(m.WriteInt(2)); 89 EXPECT_TRUE(m.WriteInt(2));
90 EXPECT_TRUE(m.WriteInt(3)); 90 EXPECT_TRUE(m.WriteInt(3));
91 91
92 std::vector<double> vec; 92 std::vector<double> vec;
93 base::PickleIterator iter(m); 93 base::PickleIterator iter(m);
94 EXPECT_FALSE(ReadParam(&m, &iter, &vec)); 94 EXPECT_FALSE(ReadParam(&m, &iter, &vec));
95 } 95 }
96 96
97 #if defined(OS_ANDROID) 97 TEST(IPCMessageIntegrity, ReadVectorTooLarge1) {
98 #define MAYBE_ReadVectorTooLarge1 DISABLED_ReadVectorTooLarge1
99 #else
100 #define MAYBE_ReadVectorTooLarge1 ReadVectorTooLarge1
101 #endif
dcheng 2017/07/13 22:25:07 Is it confirmed that this isn't a problem for the
Hzj_jie 2017/07/14 00:25:09 Looks like I should not try to include this change
102 TEST(IPCMessageIntegrity, MAYBE_ReadVectorTooLarge1) {
103 // This was BUG 1006367. This is the large but positive length case. Again 98 // This was BUG 1006367. This is the large but positive length case. Again
104 // we try to hit the non-specialized case vector<P>. 99 // we try to hit the non-specialized case vector<P>.
105 IPC::Message m(0, 1, IPC::Message::PRIORITY_NORMAL); 100 IPC::Message m(0, 1, IPC::Message::PRIORITY_NORMAL);
106 EXPECT_TRUE(m.WriteInt(0x21000003)); // This is the count of elements. 101 EXPECT_TRUE(m.WriteInt(0x21000003)); // This is the count of elements.
107 EXPECT_TRUE(m.WriteInt64(1)); 102 EXPECT_TRUE(m.WriteInt64(1));
108 EXPECT_TRUE(m.WriteInt64(2)); 103 EXPECT_TRUE(m.WriteInt64(2));
109 104
110 std::vector<int64_t> vec; 105 std::vector<int64_t> vec;
111 base::PickleIterator iter(m); 106 base::PickleIterator iter(m);
112 EXPECT_FALSE(ReadParam(&m, &iter, &vec)); 107 EXPECT_FALSE(ReadParam(&m, &iter, &vec));
113 } 108 }
114 109
115 TEST(IPCMessageIntegrity, ReadVectorTooLarge2) { 110 TEST(IPCMessageIntegrity, ReadVectorTooLarge2) {
116 // This was BUG 1006367. This is the large but positive with an additional 111 // This was BUG 1006367. This is the large but positive with an additional
117 // integer overflow when computing the actual byte size. Again we try to hit 112 // integer overflow when computing the actual byte size. Again we try to hit
118 // the non-specialized case vector<P>. 113 // the non-specialized case vector<P>.
119 IPC::Message m(0, 1, IPC::Message::PRIORITY_NORMAL); 114 IPC::Message m(0, 1, IPC::Message::PRIORITY_NORMAL);
120 EXPECT_TRUE(m.WriteInt(0x71000000)); // This is the count of elements. 115 EXPECT_TRUE(m.WriteInt(0x71000000)); // This is the count of elements.
121 EXPECT_TRUE(m.WriteInt64(1)); 116 EXPECT_TRUE(m.WriteInt64(1));
122 EXPECT_TRUE(m.WriteInt64(2)); 117 EXPECT_TRUE(m.WriteInt64(2));
123 118
124 std::vector<int64_t> vec; 119 std::vector<int64_t> vec;
125 base::PickleIterator iter(m); 120 base::PickleIterator iter(m);
126 EXPECT_FALSE(ReadParam(&m, &iter, &vec)); 121 EXPECT_FALSE(ReadParam(&m, &iter, &vec));
127 } 122 }
128 123
124 // This test needs ~20 seconds in Debug mode, or ~4 seconds in Release mode.
125 // See http://crbug.com/741866 for details.
126 TEST(IPCMessageIntegrity, DISABLE_ReadVectorTooLarge3) {
dcheng 2017/07/13 22:25:07 Nit: DISABLED
Hzj_jie 2017/07/14 00:25:09 Done.
127 base::Pickle pickle;
128 IPC::WriteParam(&pickle, 256 * 1024 * 1024);
129 IPC::WriteParam(&pickle, 0);
130 IPC::WriteParam(&pickle, 1);
131 IPC::WriteParam(&pickle, 2);
132
133 base::PickleIterator iter(pickle);
134 std::vector<int> vec;
135 EXPECT_FALSE(IPC::ReadParam(&pickle, &iter, &vec));
136 }
137
129 class SimpleListener : public IPC::Listener { 138 class SimpleListener : public IPC::Listener {
130 public: 139 public:
131 SimpleListener() : other_(NULL) { 140 SimpleListener() : other_(NULL) {
132 } 141 }
133 void Init(IPC::Sender* s) { 142 void Init(IPC::Sender* s) {
134 other_ = s; 143 other_ = s;
135 } 144 }
136 protected: 145 protected:
137 IPC::Sender* other_; 146 IPC::Sender* other_;
138 }; 147 };
(...skipping 203 matching lines...) Expand 10 before | Expand all | Expand 10 after
342 // thrown out of sync by the extra argument. 351 // thrown out of sync by the extra argument.
343 msg = new MsgClassIS(3, base::ASCIIToUTF16("expect three")); 352 msg = new MsgClassIS(3, base::ASCIIToUTF16("expect three"));
344 sender()->Send(msg); 353 sender()->Send(msg);
345 EXPECT_TRUE(listener.ExpectMessage(3, MsgClassIS::ID)); 354 EXPECT_TRUE(listener.ExpectMessage(3, MsgClassIS::ID));
346 355
347 EXPECT_TRUE(WaitForClientShutdown()); 356 EXPECT_TRUE(WaitForClientShutdown());
348 DestroyChannel(); 357 DestroyChannel();
349 } 358 }
350 359
351 } // namespace 360 } // namespace
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698