diff options
author | satorux@chromium.org <satorux@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-11-11 02:13:56 +0000 |
---|---|---|
committer | satorux@chromium.org <satorux@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-11-11 02:13:56 +0000 |
commit | 3ed062686e3cb3654ce101a5a2c409904e6ced8b (patch) | |
tree | 3b778eef59f969999da0631528b7ddbe6fc8cd32 /dbus | |
parent | 106ad14cdd25ff6574a340b7b1c8182d70973723 (diff) | |
download | chromium_src-3ed062686e3cb3654ce101a5a2c409904e6ced8b.zip chromium_src-3ed062686e3cb3654ce101a5a2c409904e6ced8b.tar.gz chromium_src-3ed062686e3cb3654ce101a5a2c409904e6ced8b.tar.bz2 |
dbus: Fix a bug where we rejected an empty array in PopArrayOfBytes()
An empty array should be allowed. Sometimes, you need to send an
empty array from methods and signals.
BUG=103793
TEST=added a test in dbus_unittests
Review URL: http://codereview.chromium.org/8525012
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@109561 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'dbus')
-rw-r--r-- | dbus/message.cc | 8 | ||||
-rw-r--r-- | dbus/message_unittest.cc | 15 |
2 files changed, 22 insertions, 1 deletions
diff --git a/dbus/message.cc b/dbus/message.cc index aa9cc55..2750cb1 100644 --- a/dbus/message.cc +++ b/dbus/message.cc @@ -755,6 +755,12 @@ bool MessageReader::PopArrayOfBytes(uint8** bytes, size_t* length) { MessageReader array_reader(message_); if (!PopArray(&array_reader)) return false; + // An empty array is allowed. + if (!array_reader.HasMoreData()) { + *length = 0; + *bytes = NULL; + return true; + } if (!array_reader.CheckDataType(DBUS_TYPE_BYTE)) return false; int int_length = 0; @@ -762,7 +768,7 @@ bool MessageReader::PopArrayOfBytes(uint8** bytes, size_t* length) { bytes, &int_length); *length = static_cast<int>(int_length); - return bytes != NULL; + return true; } bool MessageReader::PopArrayOfStrings( diff --git a/dbus/message_unittest.cc b/dbus/message_unittest.cc index 29fe888..9c76b0d 100644 --- a/dbus/message_unittest.cc +++ b/dbus/message_unittest.cc @@ -171,6 +171,21 @@ TEST(MessageTest, ArrayOfBytes) { EXPECT_EQ(3, output_bytes[2]); } +TEST(MessageTest, ArrayOfBytes_Empty) { + scoped_ptr<dbus::Response> message(dbus::Response::CreateEmpty()); + dbus::MessageWriter writer(message.get()); + std::vector<uint8> bytes; + writer.AppendArrayOfBytes(bytes.data(), bytes.size()); + + dbus::MessageReader reader(message.get()); + uint8* output_bytes = NULL; + size_t length = 0; + ASSERT_TRUE(reader.PopArrayOfBytes(&output_bytes, &length)); + ASSERT_FALSE(reader.HasMoreData()); + ASSERT_EQ(0U, length); + EXPECT_EQ(NULL, output_bytes); +} + TEST(MessageTest, ArrayOfStrings) { scoped_ptr<dbus::Response> message(dbus::Response::CreateEmpty()); dbus::MessageWriter writer(message.get()); |