diff options
author | TreeHugger Robot <treehugger-gerrit@google.com> | 2017-10-05 19:35:01 +0000 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2017-10-05 19:35:01 +0000 |
commit | 9f9c941ff397771936ee8cd91be4909057ae372e (patch) | |
tree | d63a44ef911107828bc881848eea8f631bc61a24 | |
parent | 9644f59b8a506175e2b983ac8e088da12af854ef (diff) | |
parent | 31aa7aa6c88ca932a61968025c2dab354d8c14d1 (diff) | |
download | wifilogd-9f9c941ff397771936ee8cd91be4909057ae372e.tar.gz |
Merge "Fix memory corruption by changing refs to Objects"android-9.0.0_r47android-9.0.0_r46android-9.0.0_r45android-9.0.0_r44android-9.0.0_r43android-9.0.0_r42android-9.0.0_r41android-9.0.0_r40android-9.0.0_r39android-9.0.0_r38android-9.0.0_r37android-9.0.0_r36android-9.0.0_r35android-9.0.0_r34android-9.0.0_r33android-9.0.0_r32android-9.0.0_r31android-9.0.0_r30android-9.0.0_r22android-9.0.0_r21android-9.0.0_r20android-9.0.0_r19android-9.0.0_r16android-9.0.0_r12android-9.0.0_r11pie-qpr3-s1-releasepie-qpr3-releasepie-qpr3-b-releasepie-qpr2-releasepie-qpr1-s3-releasepie-qpr1-s2-releasepie-qpr1-s1-releasepie-qpr1-releasepie-dr1-releasepie-dr1-devpie-devpie-b4s4-releasepie-b4s4-dev
-rw-r--r-- | byte_buffer.h | 2 | ||||
-rw-r--r-- | command_processor.cpp | 4 | ||||
-rw-r--r-- | tests/command_processor_unittest.cpp | 16 | ||||
-rw-r--r-- | tests/protocol_unittest.cpp | 21 |
4 files changed, 32 insertions, 11 deletions
diff --git a/byte_buffer.h b/byte_buffer.h index 2fdff62..1d79b6d 100644 --- a/byte_buffer.h +++ b/byte_buffer.h @@ -32,7 +32,7 @@ namespace wifilogd { // memory allocation. // // Usage could be as follows: -// const auto& buffer = ByteBuffer<1024>() +// const auto buffer = ByteBuffer<1024>() // .AppendOrDie(header.data(), header.size()) // .AppendOrDie(body.data(), body.size()); // write(fd, buffer.data(), buffer.size()); diff --git a/command_processor.cpp b/command_processor.cpp index b969bb4..ea223af 100644 --- a/command_processor.cpp +++ b/command_processor.cpp @@ -186,12 +186,12 @@ bool CommandProcessor::CopyCommandToLog(const void* command_buffer, } CHECK(current_log_buffer_.CanFitNow(total_size)); - const auto& tstamp_header = + const auto tstamp_header = TimestampHeader() .set_since_boot_awake_only(os_->GetTimestamp(CLOCK_MONOTONIC)) .set_since_boot_with_sleep(os_->GetTimestamp(CLOCK_BOOTTIME)) .set_since_epoch(os_->GetTimestamp(CLOCK_REALTIME)); - const auto& message_buf = + const auto message_buf = ByteBuffer<sizeof(TimestampHeader) + protocol::kMaxMessageSize>() .AppendOrDie(&tstamp_header, sizeof(tstamp_header)) .AppendOrDie(command_buffer, command_len); diff --git a/tests/command_processor_unittest.cpp b/tests/command_processor_unittest.cpp index ede5cb0..50b6e78 100644 --- a/tests/command_processor_unittest.cpp +++ b/tests/command_processor_unittest.cpp @@ -88,7 +88,7 @@ class CommandProcessorTest : public ::testing::Test { tag.length() + ascii_message_tag_len_adjustment; const size_t adjusted_data_len = message.length() + ascii_message_data_len_adjustment; - const auto& ascii_message_header = + const auto ascii_message_header = protocol::AsciiMessage() .set_tag_len(SAFELY_CLAMP( adjusted_tag_len, uint8_t, 0, @@ -103,7 +103,7 @@ class CommandProcessorTest : public ::testing::Test { const size_t payload_len = sizeof(ascii_message_header) + tag.length() + message.length() + command_payload_len_adjustment; - const auto& command = + const auto command = protocol::Command() .set_opcode(protocol::Opcode::kWriteAsciiMessage) .set_payload_len(SAFELY_CLAMP( @@ -143,10 +143,10 @@ class CommandProcessorTest : public ::testing::Test { } bool SendDumpBuffers() { - const auto& command = protocol::Command() - .set_opcode(protocol::Opcode::kDumpBuffers) - .set_payload_len(0); - const auto& buf = CommandBuffer().AppendOrDie(&command, sizeof(command)); + const auto command = protocol::Command() + .set_opcode(protocol::Opcode::kDumpBuffers) + .set_payload_len(0); + const auto buf = CommandBuffer().AppendOrDie(&command, sizeof(command)); constexpr int kFakeFd = 100; return command_processor_->ProcessCommand(buf.data(), buf.size(), kFakeFd); } @@ -220,12 +220,12 @@ TEST_F(CommandProcessorTest, ProcessCommandInvalidOpcodeReturnsFailure) { using opcode_integral_t = std::underlying_type<opcode_enum_t>::type; constexpr auto invalid_opcode = GetMaxVal<opcode_integral_t>(); - const auto& command = + const auto command = protocol::Command() .set_opcode(local_utils::CopyFromBufferOrDie<opcode_enum_t>( &invalid_opcode, sizeof(invalid_opcode))) .set_payload_len(0); - const auto& buf = CommandBuffer().AppendOrDie(&command, sizeof(command)); + const auto buf = CommandBuffer().AppendOrDie(&command, sizeof(command)); constexpr int kFakeFd = 100; EXPECT_FALSE( command_processor_->ProcessCommand(buf.data(), buf.size(), kFakeFd)); diff --git a/tests/protocol_unittest.cpp b/tests/protocol_unittest.cpp index 76de58b..abbd86b 100644 --- a/tests/protocol_unittest.cpp +++ b/tests/protocol_unittest.cpp @@ -33,6 +33,27 @@ namespace wifilogd { // 2. We need to maintain compatibility with older clients talking to // newer versions of wifilogd. +TEST(ProtocolTest, AsciiMessageChainingWorks) { + using protocol::AsciiMessage; + uint8_t tagLen = 3; + uint16_t dataLen = 7; + const auto ascii_message_header = + AsciiMessage().set_tag_len(tagLen).set_data_len(dataLen); + EXPECT_EQ(tagLen, ascii_message_header.tag_len); + EXPECT_EQ(dataLen, ascii_message_header.data_len); +} + +TEST(ProtocolTest, AsciiMessageNonChainingWorks) { + using protocol::AsciiMessage; + uint8_t tagLen = 3; + uint16_t dataLen = 7; + AsciiMessage ascii_message_header = AsciiMessage(); + ascii_message_header.set_tag_len(tagLen); + ascii_message_header.set_data_len(dataLen); + EXPECT_EQ(tagLen, ascii_message_header.tag_len); + EXPECT_EQ(dataLen, ascii_message_header.data_len); +} + TEST(ProtocolTest, AsciiMessageLayoutIsUnchanged) { using protocol::AsciiMessage; ASSERT_TRUE(std::is_standard_layout<AsciiMessage>::value); |