Chromium Code Reviews| Index: ipc/ipc_channel_reader_unittest.cc |
| diff --git a/ipc/ipc_channel_reader_unittest.cc b/ipc/ipc_channel_reader_unittest.cc |
| index 005898015bf6d40e607b2113838908ac37b73a5c..7728a8173776054436d7ebcb9ca76f863454ce3e 100644 |
| --- a/ipc/ipc_channel_reader_unittest.cc |
| +++ b/ipc/ipc_channel_reader_unittest.cc |
| @@ -4,6 +4,7 @@ |
| #include "build/build_config.h" |
| +#include <limits> |
| #include <set> |
| #include "ipc/attachment_broker.h" |
| @@ -12,12 +13,13 @@ |
| #include "ipc/placeholder_brokerable_attachment.h" |
| #include "testing/gtest/include/gtest/gtest.h" |
| -#if USE_ATTACHMENT_BROKER |
| namespace IPC { |
| namespace internal { |
| namespace { |
| +#if USE_ATTACHMENT_BROKER |
| + |
| class MockAttachment : public BrokerableAttachment { |
| public: |
| MockAttachment() {} |
| @@ -53,6 +55,8 @@ class MockAttachmentBroker : public AttachmentBroker { |
| } |
| }; |
| +#endif // USE_ATTACHMENT_BROKER |
| + |
| class MockChannelReader : public ChannelReader { |
| public: |
| MockChannelReader() |
| @@ -92,8 +96,16 @@ class MockChannelReader : public ChannelReader { |
| AttachmentBroker* broker_; |
| }; |
| +class ExposedMessage: public Message { |
| + public: |
| + using Message::Header; |
| + using Message::header; |
| +}; |
| + |
| } // namespace |
| +#if USE_ATTACHMENT_BROKER |
| + |
| TEST(ChannelReaderTest, AttachmentAlreadyBrokered) { |
| MockAttachmentBroker broker; |
| MockChannelReader reader; |
| @@ -129,6 +141,55 @@ TEST(ChannelReaderTest, AttachmentNotYetBrokered) { |
| EXPECT_EQ(m, reader.get_last_dispatched_message()); |
| } |
| +#endif // USE_ATTACHMENT_BROKER |
| + |
| +#if !USE_ATTACHMENT_BROKER |
|
Maria
2015/09/25 22:23:00
should we just do #else here? instead of another i
Dmitry Skiba
2015/09/28 17:37:18
The effect of #else will be the same, but it's jus
|
| + |
| +// We can determine message size from its header (and hence resize the buffer) |
| +// only when attachment broker is not used, see IPC::Message::FindNext(). |
| + |
| +TEST(ChannelReaderTest, ResizeOverflowBuffer) { |
| + MockChannelReader reader; |
| + |
| + ExposedMessage::Header header = {}; |
| + |
| + header.payload_size = 128 * 1024; |
| + EXPECT_LT(reader.input_overflow_buf_.capacity(), header.payload_size); |
| + EXPECT_TRUE(reader.TranslateInputData( |
| + reinterpret_cast<const char*>(&header), sizeof(header))); |
| + |
| + // Once message header is available we resize overflow buffer to |
| + // fit the entire message. |
| + EXPECT_GE(reader.input_overflow_buf_.capacity(), header.payload_size); |
| +} |
| + |
| +TEST(ChannelReaderTest, InvalidMessageSize) { |
| + MockChannelReader reader; |
| + |
| + ExposedMessage::Header header = {}; |
| + |
| + size_t capacity_before = reader.input_overflow_buf_.capacity(); |
| + |
| + // Message is slightly larger than maximum allowed size |
| + header.payload_size = Channel::kMaximumMessageSize + 1; |
| + EXPECT_FALSE(reader.TranslateInputData( |
| + reinterpret_cast<const char*>(&header), sizeof(header))); |
| + EXPECT_LE(reader.input_overflow_buf_.capacity(), capacity_before); |
| + |
| + // Payload size is negative, overflow is detected by Pickle::PeekNext() |
| + header.payload_size = static_cast<uint32_t>(-1); |
| + EXPECT_FALSE(reader.TranslateInputData( |
| + reinterpret_cast<const char*>(&header), sizeof(header))); |
| + EXPECT_LE(reader.input_overflow_buf_.capacity(), capacity_before); |
| + |
| + // Payload size is maximum int32 value |
| + header.payload_size = std::numeric_limits<int32_t>::max(); |
| + EXPECT_FALSE(reader.TranslateInputData( |
| + reinterpret_cast<const char*>(&header), sizeof(header))); |
| + EXPECT_LE(reader.input_overflow_buf_.capacity(), capacity_before); |
| +} |
| + |
| +#endif // !USE_ATTACHMENT_BROKER |
| + |
| } // namespace internal |
| } // namespace IPC |
| -#endif // USE_ATTACHMENT_BROKER |